pandasでExcelファイル(xlsx, xls)の書き込み(to_excel)

Modified: | Tags: Python, pandas, Excel

pandas.DataFrameをExcelファイル(拡張子: .xlsx, .xls)として書き出す(保存する)にはto_excel()メソッドを使う。

ここでは以下の内容について説明する。

  • openpyxl, xlwtのインストール
  • DataFrameをExcelファイルに書き込み(新規作成・上書き保存)
  • 複数のDataFrameをExcelファイルに書き込み(新規作成・上書き保存)
  • DataFrameを既存のExcelファイルに書き込み(追記)

Excelファイルの読み込みについては以下の記事を参照

PythonでのExcelファイルの扱いについては以下の記事を参照。

そのほかpandasでのcsvファイル、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, headerFalseとする。

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

関連カテゴリー

関連記事