ITや趣味など気軽に投稿しています。

【Pandas】Excelファイルをデータフレームとして読み込む

PandasではExcelファイルをデータフレームとして読み込んだり、データフレームをExcelファイルに出力することができます。

今回はExcelファイルをデータフレームとして読み込む方法を紹介する。
なお、Pandas2.2.3を対象にしている。

pd.read_excel()

まずはpandasモジュールを読み込む必要があるので、import文でpandasを読み込みます。

Excelの読込にはpd.read_excel()を用います。引数には必ずファイルのパスを指定します。相対パスでも絶対パスでも問題ありません。

pandas.read_excel(iosheet_name=0*header=0names=Noneindex_col=Noneusecols=Nonedtype=Noneengine=Noneconverters=Nonetrue_values=Nonefalse_values=Noneskiprows=Nonenrows=Nonena_values=Nonekeep_default_na=Truena_filter=Trueverbose=Falseparse_dates=Falsedate_parser=<no_default>date_format=Nonethousands=Nonedecimal=’.’comment=Noneskipfooter=0storage_options=Nonedtype_backend=<no_default>engine_kwargs=None)

実行すると、以下のようなデータが読み込まれます。

import pandas as pd

df = pd.read_excel("input/apple_stock.xlsx")
apple_stock.xlsx

引数

引数必須説明
io読み込むファイルのパス。
sheet_name読み込むシート名を指定する。複数の場合はリストで指定する。
headerカラムとして利用する行番号を指定する。デフォルトは0。
headerがない場合はNoneを指定する。
namesカラム名を別途指定する場合、配列で指定する。
index_colインデックスとして使用する列を指定する。デフォルトは指定なく、連番が割り当てられる。
usecols読み込むカラムを指定する。
dtypeデータの型を指定する。任意の型を指定すると、データフレーム全体がその型になる。カラムごとに辞書形式で指定も可能。
engine‘openpyxl’, ‘calamine’, ‘odf’, ‘pyxlsb’, ‘xlrd’のいずれかを指定。
デフォルトはNone。
converters特定の列に関数処理を実行する。{列名:処理}の辞書形式で指定する。
true_valuesTrueの値について、別のワードを使用したい場合に指定。’Yes’など。
false_valuesFalseの値について、別のワードを使用したい場合に指定。’No’など。
skiprows先頭からスキップしたい行を指定する。配列、整数またはcallable関数で指定可能。
nrows読み込む行数を整数で指定する。
na_valuesNA/NANについて、別のワードを使用したい場合に指定。
keep_default_naFalseにすると、NAなどが欠損値として扱われなくなる。
na_valuesで指定した値は対象外。
na_filterFalseにすると、全ての値を欠損値として扱わずに読み込む。
verbose数値以外の列の欠損値の数を表示する。
parse_dates指定の列をdatetime64[ns]に変換する。
date_parser(非推奨)文字列のカラムをdatetime64[ns]に変換する。2.0.0以降はdate_formatの利用を推奨。
date_formatparse_datesと組み合わせて使用し、日付の変換フォーマットを指定する。
thousands文字列を数値に変換する際の区切り文字を指定する。Excelで文字列で保存されている数字のみに適用される。数値で保存されている場合、無効。
decimal文字列を数値に変換する際の小数点となる文字を指定する。
comment文字列のカラムについて、指定した文字列から始まるセルを欠損値として扱う。
skipfooter読み込みをスキップする末尾の行数。
storage_optionsS3などリモートのファイルへのアクセスに必要な情報を辞書形式で指定する。
dtype_backendバックエンドのデータタイプ。
‘numpy_nullable’, ‘pyarrow’のいずれかを指定。
デフォルトは‘numpy_nullable’

とんでもない引数の数ですね、、

必須なのは読み込むファイルのパスのみ。あとは、必要に応じて指定するといい。

よく使う引数をいくつか紹介しよう。

sheet_name

引数sheet_nameで読み込むシートを指定できます。シート名を文字列で指定することもできますし、0からの番号でシートを指定することもできます。デフォルトは0です(先頭シート)。

df = pd.read_excel("input/apple_stock.xlsx", sheet_name=0)

names

データフレームの列名として使用する値をリスト形式で指定します。

リストの要素数とデータフレームの列数が一致する場合は、リストの要素番号とデータフレームの列番号で列名が割り当てられます。

#リストの要素数とデータフレームの列数が同じ場合
cols = ["Date_renemed", "Open_renemed", "High_renemed", "Low_renemed", "Close_renemed", "Volume_renemed", "Adj_Close_renemed"]
df = pd.read_excel("input/apple_stock.xlsx", names=cols)
cols = ["Date_renemed", "Open_renemed", "High_renemed", "Low_renemed", "Close_renemed", "Volume_renemed", "Adj_Close_renemed"]
df = pd.read_excel("input/apple_stock.xlsx", names=cols)

リストの要素数がデータフレームの列数より少ない場合、データフレームの先頭列及び末尾の余剰列がインデックスとして割り当てられます。

#リストの要素数がデータフレームの列数より少ない場合
cols = ["Date_renemed", "Open_renemed", "High_renemed", "Low_renemed"]
df = pd.read_excel("input/apple_stock.xlsx", names=cols)
cols = ["Date_renemed", "Open_renemed", "High_renemed", "Low_renemed"]
df = pd.read_excel("input/apple_stock.xlsx", names=cols)

基本的にはデータフレームの列数とリストの要素数は合わせておくべきだな。

header

デフォルトでは1行目はヘッダーとみなされ、カラム名に割り当てられます。引数header=Noneとすることで、1行目もデータとして扱われるようになります。なお、カラム名には0からの連番が割り当てられます。

df = pd.read_excel("input/apple_stock.xlsx", header=None)
header=None

index_col

インデックスに割り当てる列を指定することができます。列番号(左端が0)または列名を指定します。

df = pd.read_excel("input/apple_stock.xlsx", index_col=3)
df = pd.read_excel("input/apple_stock.xlsx", index_col="Open")
index_col=3

usecols

読み込み対象の列を指定します。指定しない場合、すべての列が読み込まれます。

列の指定は、列番号の配列または列名の配列で指定します。列番号と列名の混合配列はErrorとなります。

df = pd.read_excel("input/apple_stock.xlsx", usecols=[0, 1, 4])
df = pd.read_excel("input/apple_stock.xlsx", usecols=["Date", "High", "Close"])
df = pd.read_excel("input/apple_stock.xlsx", usecols=["Date", "High", "Close"])

dtype

読み込む列の型を指定します。データフレーム全体の一括型指定または、辞書形式で列ごとに型を指定します。

データフレーム全体を数値や日付といった型に一括変換しようとした場合、文字列等変換できないデータが混在しているとエラーになるので、注意してください。

#データフレーム全体を一括で型指定
df = pd.read_excel("input/apple_stock.xlsx", dtype=object)
df.dtypes

>>
Date         object
High         object
Low          object
Open         object
Close        object
Volume       object
Adj Close    object
dtype: object

列ごとに型指定する場合、辞書形式で指定します。指定しなかった列は、デフォルトで読み込まれた型が適用されます。

#列ごとに型指定
df = pd.read_excel("input/apple_stock.xlsx", dtype={"Date": str, "Open": float, "High": object, "Low": float, "Close": float})
df.dtypes

>>
Date          object
High          object
Low          float64
Open         float64
Close        float64
Volume       float64
Adj Close    float64
dtype: object

skiprows

読み込みをスキップする行を行番号のリストで指定します。

callable関数で指定する場合、関数はインデックス番号に対して適用されます。lambda x: x % 2 == 0とした場合、偶数行の読み込みがスキップされ奇数行のみが読み込まれます。

df = pd.read_excel("input/apple_stock.xlsx", skiprows=[0,2])
#callable関数
df = pd.read_excel("input/apple_stock.xlsx", skiprows=lambda x: x % 2 == 0)

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

まとめ

pandasでExcelファイルを読み込む方法を紹介しました。ExcelのデータセットをPythonで分析みたいなケースもあると思うので、是非参考にしてみてください。

引数がいろいろと用意されている。読み込む際に不要なデータを読み込まない等工夫をすることで、パフォーマンス向上が図れる。かもな。

全部読み込んで処理するより、必要な分だけ読み込めばいいですもんね。

次はデータフレームをExcelファイルとして出力する方法を紹介しよう。

ありがとうございました~~♪