HOWTO · Pandas
Pandas データフレームを Excel ファイルにエクスポートする
このチュートリアルでは、Pandas のデータフレームを Excel ファイルにエクスポートする方法に関するさまざまな方法について説明します。
このページの内容
Pandas の DataFrame は DataFrame.to_excel() を使って Excel ブックに出力できます。行ラベルをワークシートの列に含めない場合は、index=False を指定します。複数の表を1つのブックに書き込む場合や、書き込みエンジンを設定する場合は ExcelWriter を使います。
to_excel() を使って DataFrame を Excel ファイルに出力する
1つの DataFrame を保存するには、ファイル名を指定して to_excel() を呼び出します。既定では、Pandas は DataFrame のインデックスをワークシートの最初の列として書き込みます。名前付きの列だけをワークシートに含めるには、index=False を渡します。利用できるオプションについては、DataFrame.to_excel() のリファレンスを参照してください。
この例では小さな売上表を作成し、その列を現在の作業ディレクトリにある sales.xlsx に書き込みます。Pandas は .xlsx ファイル用に、インストール済みの Excel 書き込みエンジンを選択します。環境に対応するエンジンがない場合は、openpyxl や XlsxWriter などをインストールしてください。
import pandas as pd
sales = pd.DataFrame(
{
"product": ["Keyboard", "Mouse"],
"units": [12, 25],
}
)
sales.to_excel("sales.xlsx", index=False)
print("Saved sales.xlsx")
Saved sales.xlsx
保存したブックには product 列と units 列が含まれ、余分なインデックス列はありません。これらの列ラベルは、変更されていない例では英語のままです。行ラベルも含めるには、index=False を省略します。相対ファイル名はプロセスの現在の作業ディレクトリを基準に解決されます。別の場所に保存するには、絶対パスまたはディレクトリを含むパスを指定してください。
インデックスを含めるかどうかは、スプレッドシートの用途に応じて決めます。DataFrame のインデックスに、列にはまだ格納されていない識別子など、意味のある行ラベルが含まれる場合は残します。読み手に名前付きのデータ列だけを見せたい場合や、別のシステムが決まったヘッダーを想定している場合は省略します。この設定は、ExcelWriter 経由で呼び出す場合も含め、各 to_excel() 呼び出しで指定できます。
プロセスが書き込めるパスを選び、必要に応じて先に親ディレクトリを作成してください。Pandas はブックファイルを書き込みますが、存在しないディレクトリは作成しません。スクリプトの起動場所に左右されない保存先にするには、フルパスも指定できます。こうした点を押さえておくと、エディター、ノートブック、またはスケジュール実行からコードを動かす場合にも、ブックの保存場所を把握しやすくなります。
ExcelWriter で DataFrame を書き込む
ブックの作成方法を制御する場合や、複数の DataFrame を書き込む場合は、ExcelWriter をコンテキストマネージャーとして使います。ブロックが終了すると、コンテキストマネージャーがブックを閉じて確定します。Pandas は既定でインストール済みの Excel 書き込みエンジンを選択します。必要に応じて、openpyxl や XlsxWriter などの対応エンジンをインストールしてください。
import pandas as pd
students = pd.DataFrame(
{
"student": ["Sam", "Ali", "Sara"],
"marks": [88, 93, 79],
}
)
with pd.ExcelWriter("student-results.xlsx") as writer:
students.to_excel(writer, sheet_name="Results", index=False)
print("Saved student-results.xlsx")
Saved student-results.xlsx
to_excel() を通じて DataFrame をライターに渡し、sheet_name でワークシートのタブ名を指定します。ライターの save() メソッドを直接呼び出す代わりに、コンテキストマネージャーを使ってください。ブロックが途中で終了した場合も、ブックの確定処理が行われます。別のパスを指定しない限り、ファイルは現在の作業ディレクトリを基準に作成されます。
複数の DataFrame を別々の Excel ワークシートに出力する
同じ ExcelWriter オブジェクトを各 DataFrame の to_excel() 呼び出しに渡すと、複数の表を1つのブックにまとめられます。読み手が各表を個別のワークシートで見つけられるように、呼び出しごとに異なる sheet_name を指定します。次の例では、3つの教科別テーブルを1つのブックに書き込みます。実行には Pandas と、インストール済みの Excel 書き込みエンジンが必要です。
import pandas as pd
science = pd.DataFrame({"student": ["Ali", "Umar"], "score": [88, 60]})
computing = pd.DataFrame({"student": ["Ali", "Umar"], "score": [73, 63]})
arts = pd.DataFrame({"student": ["Ali", "Umar"], "score": [95, 63]})
with pd.ExcelWriter("student-results.xlsx") as writer:
science.to_excel(writer, sheet_name="Science", index=False)
computing.to_excel(writer, sheet_name="Computing", index=False)
arts.to_excel(writer, sheet_name="Arts", index=False)
print("Saved student-results.xlsx with three worksheets")
Saved student-results.xlsx with three worksheets
3つの呼び出しはすべて同じブックを対象としており、sheet_name の値によって各ワークシートの名前が決まります。ワークシート名は重複しないようにし、Excel のシート名の長さ制限内に収めてください。Pandas から Excel 書き込みエンジンが利用できないというエラーが表示された場合は、スクリプトの実行環境に openpyxl や XlsxWriter などの対応エンジンをインストールしてください。