1. ホーム
  2. python

[解決済み] DataFrameのリストをマルチシートのExcelスプレッドシートに保存する。

2022-10-10 07:29:14

質問

DataFrame のリストを 1 つの Excel スプレッドシートにエクスポートするにはどうしたらよいでしょうか。

のドキュメントを参照してください。 to_excel の状態です。

注意事項

既存のExcelWriterオブジェクトを渡すと、そのシートは既存のワークブックに追加されます。 既存のワークブックに追加されます。 これは、異なる 1つのワークブックに異なるデータフレームを保存するために使用できます。

writer = ExcelWriter('output.xlsx')

df1.to_excel(writer, 'sheet1')

df2.to_excel(writer, 'sheet2')

writer.save()

これを受けて、以下のようにDataFrameのリストを1つのスプレッドシートに保存する関数を書こうと思いました。

from openpyxl.writer.excel import ExcelWriter
def save_xls(list_dfs, xls_path):
    writer = ExcelWriter(xls_path)
    for n, df in enumerate(list_dfs):
        df.to_excel(writer,'sheet%s' % n)
    writer.save()

しかし(2つの小さなDataFrameのリストで、それぞれが保存可能な to_excel を個別に保存できる) 場合は、例外が発生します。 (編集: トレースバックを削除しました) :

AttributeError: 'str' object has no attribute 'worksheets'

おそらく、私は ExcelWriter を正しく呼び出していないようですが、これを行うにはどうすればよいのでしょうか?

どのように解決するには?

pandas自身の ExcelWriter クラスを使っています。

from pandas import ExcelWriter
# from pandas.io.parsers import ExcelWriter

次に save_xls 関数は期待通りに動作します。

def save_xls(list_dfs, xls_path):
    with ExcelWriter(xls_path) as writer:
        for n, df in enumerate(list_dfs):
            df.to_excel(writer,'sheet%s' % n)
        writer.save()