[DataFrame] xl関数の指定方法いろいろ

Python in Excel 入門 - fnc DataFrame
この記事は約7分で読めます。

この記事では、DataFrameの定義、xl関数の使い方や注意点について説明します。DataFrameを使うと、Excelのセル範囲や名前、テーブル、Power Queryのデータを Python in Excel で扱えるようになります。

2023年10月現在、Python in Excel は Microsoft 365 Insider Program のベータチャネルを選択することによって使用できるベータ版のExcelでのみ利用可能です。
ベータ版のExcelのインストール・初期設定方法は以下で詳しく紹介しています。

DataFrameとは

DataFrameとは、2次元データ構造オブジェクトのことで、pandasライブラリ内のオブジェクトの1つです。Python in Excel では、ExcelのデータをPythonで扱えるようにするために、xl関数を使ってDataFrameオブジェクトを生成します。

xl関数の引数には、セル範囲、名前、テーブル、Power Queryを指定することができます。

xl関数の構文

xl( "データ範囲", headers ) 
戻り値DataFrame
引数説明
データ範囲
(必須)
stringセル範囲のアドレス or 名称
例)”A1:B6″、”テーブル1″、”テーブル1[#すべて]”
※ テーブルおよびPower Queryではヘッダー行も含める場合、
[#すべて]指定子を名称の後ろにつける
headers
(任意)
boolデータ範囲にヘッダーを含むか
指定しない場合は「False」とみなされる

xl関数を使ってDataFrameを定義する方法

セル範囲

以下のような表が、A1:B6セルにあるとします。

Python in Excel 入門 - fnc
Pythonセルにxl関数を入力する方法

セルアドレスの記述は「$」を使った絶対参照でもOKです。他のシートの範囲指定も可能です。

# 絶対参照
df_1=xl("$A$1:$B$6", headers=True)
# 他のシートの範囲を参照
df_2=xl("Sheet2!$A$1:$E$6", headers=True)

名前、テーブル、Power Query(外部データ)

表が名前、テーブル、Power Query(外部データ)であっても、入力方法は上記と同じです。第1引数には名称が入ります。

# 名前をつけた表の場合
df_1=xl("果物表", headers=True)

テーブルの場合、ヘッダー行も含める場合は [#すべて]指定子を追加し、headers=True と指定します。

# テーブルの場合

# ヘッダー行も含める場合
df_2=xl("テーブル1[#すべて]", headers=True)
# ヘッダー行を含めない場合
df_3=xl("テーブル1", headers=False)
Python in Excel 入門 - fnc
Python in Excel 入門 - fnc

Power Query(外部データ)の場合もテーブルと同じく、ヘッダー行も含める場合は [#すべて]指定子を追加し、headers=True と指定します。

# Power Queryの場合

# ヘッダー行も含める場合
df_4=xl("fruits[#すべて]", headers=True)
# ヘッダー行を含めない場合
df_5=xl("fruits", headers=False)
Python in Excel 入門 - fnc

行の指定(特殊項目指定子)

前セクションでは、ヘッダー行も含めたすべての範囲を指定する方法を紹介しました。
テーブルやPower Query(外部データ)の場合は、[#すべて]指定子以外にも、[#データ]指定子、[#見出し]指定子を使って、それぞれデータ行の範囲ヘッダー行の範囲のみを取得することができます

# 「テーブル1」=A3:D8

# F3セル
xl("テーブル1[#すべて]", headers=True)
# F13セル
xl("テーブル1[#データ]")
# F23セル
xl("テーブル1[#見出し]")
Python in Excel 入門 - dataframe2

列の指定(参照演算子)

前セクションでは、ヘッダー行やデータ行に限定して指定する方法を紹介しました。
テーブルやPower Query(外部データ)の場合は、列も指定することが可能です。

1つの列を抽出する場合は1つの列名を指定し、複数の列を抽出する場合はコロン「:」で抽出対象の先頭列と最後列の列名をつないで指定し、連続した列範囲を取得します。

# 「テーブル2」=A3:D8

# F3セル
xl("テーブル2[営業 担当者]")
# F12セル
xl("テーブル2[[売上金額]:[手数料 (%)]]")
# F22セル
xl("テーブル2[[#すべて],[地域]:[手数料 (%)]]", headers=True)
Python in Excel 入門 - dataframe1

コロン「:」で連続した列範囲を取得することはできましたが、飛び飛びで列を取得する方法が見つけられませんでした…
xl関数で列を指定するのではなく、Power Queryであらかじめ列を削除して定義しておくと良いかもしれません。

xl関数の注意点

特殊項目指定子の[#すべて][#データ][#見出し]指定子は、公式サイトでは [#All][#Data][#Headers]と記載されていますが、筆者の環境ではエラーとなり指定できませんでした。
日本語環境では[#すべて][#データ][#見出し] と日本語で指定するようです。

テーブルや Power Query は、ヘッダー行を除いた範囲が名前登録されるみたい…
なので、xl関数では[#すべて]指定子を付けてヘッダー行も含めるように記述する必要があるようです。

Python in Excel 入門 - fnc
Python in Excel 入門 - fnc

参考

タイトルとURLをコピーしました