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で直接操作するのが便利。以下の記事を参照。