pandasでExcelファイル(xlsx, xls)の書き込み(to_excel)
pandas.DataFrameをExcelファイル(拡張子: .xlsx, .xls)として書き出す(保存する)にはto_excel()メソッドを使う。
ここでは以下の内容について説明する。
- openpyxl, xlwtのインストール
DataFrameをExcelファイルに書き込み(新規作成・上書き保存)- 複数の
DataFrameをExcelファイルに書き込み(新規作成・上書き保存) DataFrameを既存のExcelファイルに書き込み(追記)
Excelファイルの読み込みについては以下の記事を参照
PythonでのExcelファイルの扱いについては以下の記事を参照。
そのほかpandasでのcsvファイル、jsonファイルの読み書き(入出力)については以下の記事を参照。
- 関連記事: pandasでcsv/tsvファイル読み込み(read_csv, read_table)
- 関連記事: pandasでcsvファイルの書き出し・追記(to_csv)
- 関連記事: pandasでJSON文字列・ファイルを読み込み(read_json)
- 関連記事: pandas.DataFrameをJSON文字列・ファイルに変換・保存(to_json)
openpyxl, xlwtのインストール
to_excel()では内部でopenpyxl, xlwtというライブラリを使っている。
openpyxlは.xlsx(Excel2007以降のフォーマット)の書き込み、xlwtは.xlsファイル(Excel2003までのフォーマット)の書き込みに使われる。
どちらもはpipでインストールできる。(環境によってはpip3)
$ pip install openpyxl
$ pip install xlwt
なお、pandas1.2.0時点でxlwtはメンテナンスされていないためdeprecated(非推奨)となっている。
DataFrameをExcelファイルに書き込み(新規作成・上書き保存)
以下のpandas.DataFrameを例とする。
import pandas as pd
print(pd.__version__)
# 1.2.2
df = pd.DataFrame([[11, 21, 31], [12, 22, 32], [31, 32, 33]],
index=['one', 'two', 'three'], columns=['a', 'b', 'c'])
print(df)
# a b c
# one 11 21 31
# two 12 22 32
# three 31 32 33
to_excel()メソッドの第一引数にパスを指定すると、ファイルが存在しない場合は新規作成、ファイルが存在している場合は上書き保存される。上書きの際は元のファイルのデータが削除されるので注意。既存ファイルに新たなシートを追加する例は後述。
引数sheet_nameにはシート名を指定する。省略するとSheet1という名前になる。
df.to_excel('data/dst/pandas_to_excel.xlsx', sheet_name='new_sheet_name')
index(行名), columns(列名)を書き出す必要がない場合は、引数index, headerをFalseとする。
df.to_excel('data/dst/pandas_to_excel_no_index_header.xlsx',
index=False, header=False)
複数のDataFrameをExcelファイルに書き込み(新規作成・上書き保存)
ExcelWriterオブジェクトを使うと、複数のpandas.DataFrameオブジェクトを別々のシートに書き出すことが可能。
例としてpandas.DataFrameオブジェクトをもう一つ用意する。
df2 = df[['a', 'c']]
print(df2)
# a c
# one 11 31
# two 12 32
# three 31 33
pandas.ExcelWriter()にパスを指定してExcelWriterオブジェクトを生成し、to_excel()メソッドの第一引数に指定する。
withブロックを使うとwriter.save(), writer.close()を呼ぶ必要がないので楽。
with pd.ExcelWriter('data/dst/pandas_to_excel_multi.xlsx') as writer:
df.to_excel(writer, sheet_name='sheet1')
df2.to_excel(writer, sheet_name='sheet2')
DataFrameを既存のExcelファイルに書き込み(追記)
pandas.ExcelWriter()で引数mode='a'とすると追記モードになり、既存のExcelファイルに新たなシートとしてpandas.DataFrameを追加できる。
with pd.ExcelWriter('data/dst/pandas_to_excel.xlsx', mode='a') as writer:
df.to_excel(writer, sheet_name='new_sheet1')
df2.to_excel(writer, sheet_name='new_sheet2')
既存のシート名を指定した場合は、シート名の末尾に1始まりの数字を追加した新たなシートが追加される。既存シートの上書きにはならない。
新たなシートを追加するのではなく、既存のExcelファイルのシートの書式を保ったまま編集・追記(セルの値の変更、新たなセルの追加など)したい場合はopenpyxlで直接操作するのが便利。以下の記事を参照。