web-dev-qa-db-ja.com

DataFramesのリストを複数シートのExcelスプレッドシートに保存する

DataFrameのリストを1つのExcelスプレッドシートにエクスポートするにはどうすればよいですか?
_to_Excel_ 状態のドキュメント:

ノート
既存のExcelWriterオブジェクトを渡す場合、シートは既存のワークブックに追加されます。これを使用して、異なるDataFrameを1つのワークブックに保存できます。

writer = ExcelWriter('output.xlsx')
df1.to_Excel(writer, 'sheet1')
df2.to_Excel(writer, 'sheet2')
writer.save()

これに続いて、次のようにDataFramesのリストを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()
_

ただし、それぞれが_to_Excel_を個別に保存できる2つの小さなDataFrameのリストを使用すると、例外が発生します(Edit:traceback removed)

_AttributeError: 'str' object has no attribute 'worksheets'
_

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

65
Andy Hayden

pandas own 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()
102
Andy Hayden

誰かがデータフレームの辞書でこれを行う方法の例を必要とする場合:

_from pandas import ExcelWriter

def save_xls(dict_df, path):
"""
Save a dictionary of dataframes to an Excel file, with each dataframe as a seperate page
"""

writer = ExcelWriter(path)
for key in dict_df:
    dict_df[key].to_Excel(writer, key)

writer.save()
_

例:save_xls(dict_df = my_dict, path = '~/my_path.xls')

3
Jared Marks