pandasでExcelファイルの読み込み(read_excel)

pandasでExcelファイルの読み込み(read_excel)
スポンサーリンク
スポンサーリンク

Pythonの外部ライブラリ pandas で Excelファイル(xlsx, xls)を DataFrame として読み込む方法を解説します。
DataFrame として読み込まれたデータは、様々な加工や集計が可能になります。

pandasの使い方についてはこちらの記事も参考にしてください。
・関連記事:pandasでSeries, DataFrameを作成する
・関連記事:pandas DataFrameからデータを抽出

スポンサーリンク

使用ライブラリ

ライブラリ :pandas(公式ドキュメント
インストール:必要
ライブラリ :openpyxl (公式ドキュメント
インストール:必要(.xlsx用)
モジュール :xlrd(公式ドキュメント
インストール:必要(.xls用)

pandas で Excel ファイルを読み込む際には内部で openpyxl, xlrd を利用します。
openpyxlについては以下の記事で紹介しています。
・関連記事:PythonでExcelファイルを操作する(openpyxl)

ライブラリのインストール

.xlsxを読み込むには openpyxl、.xlsを読み込むには xlrd が必要です。
いずれのライブラリもpipでインストールできます。
・関連記事:Pythonライブラリのインストール(pipの使い方)

python -m pip install pandas openpyxl
(.xls利用時のみ)python -m pip install xlrd

Successfully installed ・・・・と表示されればインストールは成功です。
(依存関係のある他のライブラリも同時にインストールされます)

サンプルデータ

Excelファイルは2つのファイルを使用します。ファイルはpython実行ディレクトリに保存されているものとします。
data.xlsx:ヘッダ(列名)を含むデータが3シート分保存されているファイル
data_noheader.xlsx:①のヘッダ(列名)を含まないデータ

data.xlsx

以降の説明は、xlsx ファイルで進めますが xls の場合でも同様です。

ライブラリのインポート

pandas をインポートします。

openpyxl, xlrd のインポートは不要です。

Excelファイルを読み込む(read_excel)

Excelファイルを読み込むには read_excel() メソッドを使用します。

pandasオブジェクト.read_excel(ファイルパス)

例としてpython実行ディレクトリにある data.xlsx を読み込みます。

pandasのDataFrameとしてシートのデータが読み込まれます。

ファイル読み込み

引数にファイル名以外を指定していない場合は、ファイルの1シート目が読み込まれます。
またインデックスは自動で連番が付与され、1行目がヘッダに設定されます。

XLRDError: Excel xlsx file; not supportedというエラーが発生する場合は、引数にengine="openpyxl"を追加します。

Excelファイルを読み込む(ExcelFile.parse)

Excel ファイルを読み込む方法として ExcelFile.parse() を使用する方法もあります。

結果は上述の read_excel() と同じです。
引数なども全く同じで処理速度も違いがないようなので、基本的には read_excel を使用すれば良いと思います。

インデックスを指定して読み込む

インデックスを指定して読み込みたい場合は、引数にindex_colにインデックス番号もしくは列名を指定して読み込みます。

pandasオブジェクト.read_excel(ファイルパス, index_col=インデックス番号または列名)

列のインデックス番号は下図のように1列目が0から開始します。今回は1列目をインデックスとして読み込んでみます。

インデックス番号

列名を直接指定しても同じ結果になります。

下図のように1列目がインデックスに設定されます。

インデックス指定

複数のインデックスを指定して読み込む

インデックスを複数指定して読み込むこともできます。

インデックスを複数指定

列を指定して読み込む

特定の列のみを読み込みたい場合は、usecols を指定します。

pandasオブジェクト.read_excel(ファイルパス, usecols=列インデックス番号のリスト)
pandasオブジェクト.read_excel(ファイルパス, usecols = A1形式の列見出し範囲)

または

特定の行を飛ばして読み込む

特定の行だけを飛ばして読み込みたい場合には、引数skiprowsを指定します。飛ばす行番号はリストで指定します。

pandasオブジェクト.read_excel(ファイルパス, skiprows = 行インデックス番号のリスト)

1シート目の4,5行目を飛ばして読み込んでみます。

支店CDS03, S04の行が飛ばされて読み込まれました。

特定行を飛ばす

ヘッダ(列名)を指定しないで読み込む

データにヘッダ(列名)が無い場合、初期設定ではデータ行がヘッダに設定されてしまいます。
その場合は引数に header=None を指定することで、ヘッダ無しで読み込む事ができます。
(サンプルデータ data_noheader.xlsx を使用します)

ヘッダ無し

ヘッダ(列名)を設定・変更して読み込む

ヘッダ(列名)を設定して読み込みたい場合は、引数namesに列名のリストを指定して読み込みます。
元のデータにヘッダが含まれている場合は、skip_rows=0で1行目を飛ばして2行目から読み込み、列名を設定することで変更します。

pandasオブジェクト.read_excel(ファイルパス, names=列名のリスト)
ヘッダ設定

元のデータにヘッダが含まれている場合は、skip_rows=0で1行目を飛ばして2行目から読み込み、列名を設定することで変更します。(data.xlsx を読み込み)

ヘッダ変更

シートを指定して読み込む

読み込むシートを指定する場合は、引数 sheet_name に読み込みたいシート名を指定します。
(ファイルが1シートのみの場合は不要)

pandasオブジェクト.read_excel(ファイルパス, sheet_name=読み込むシート名)
シート指定

複数シートの読み込み

sheet_name にリストでシート名を指定することで、複数のシートを読み込むことができます。
返り値は辞書型になり、シート名がキー、シート内データが値になります。

全てのシートの読み込み

全てのシートを読み込む場合は sheet_name=None とします。
この場合も返り値は辞書型で、シート名がキー、シート内データが値になります。

読み込んだデータの連結

読み込んだ複数シートのデータを縦方向に連結する方法を解説します。
手順は、1.pandasで全シート読み込み → 2.各シートのDataFrameをリストに格納 → 3.pandasで縦連結 の流れになります。

結果は以下のようになります。

シート結合

pandas を使用してExcelファイルを読み込む方法を解説しました。


読み込んだデータをExcelファイルに書き込むには以下の記事を参照してください。
・参考記事:pandasでExcelファイルの書き込み(to_excel)

PandasのSeriesやDataFrameについてはこちらの記事を参照してください。
・参考記事:PandasでSeries, DataFrameを作成する
・参考記事:pandas DataFrameからデータを抽出

CSVファイルの読み込み方法はこちらの記事を参照してください。
・参考記事:pandasでCSVファイルを読み込む方法(read_csv)