Подтвердить что ты не робот

Сохранить список DataFrames для многостраничной таблицы Excel

Как я могу экспортировать список DataFrames в одну таблицу Excel?
Документы для to_excel:

Примечания
Если передать существующий объект ExcelWriter, тогда будет добавлен лист к существующей книге. Это можно использовать для сохранения различных DataFrames в одну книгу

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

После этого я решил написать функцию, которая сохраняет список DataFrames в одну таблицу следующим образом:

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()

Однако (со списком двух небольших DataFrames, каждый из которых может сохранять to_excel отдельно), создается исключение (Edit: traceback removed):

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

Предположительно, я не правильно называю ExcelWriter, как я должен быть для этого?

4b9b3361

Ответ 1

Вы должны использовать собственный класс 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()

Ответ 2

На случай, если кому-то понадобится пример того, как сделать это с помощью словаря данных:

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')