Save list of DataFrames to multisheet Excel spreadsheet

微笑、不失礼 提交于 2019-11-26 06:16:13

问题


How can I export a list of DataFrames into one Excel spreadsheet?
The docs for to_excel state:

Notes
If passing an existing ExcelWriter object, then the sheet will be added to the existing workbook. This can be used to save different DataFrames to one workbook

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

Following this, I thought I could write a function which saves a list of DataFrames to one spreadsheet as follows:

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

However (with a list of two small DataFrames, each of which can save to_excel individually), an exception is raised (Edit: traceback removed):

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

Presumably I am not calling ExcelWriter correctly, how should I be in order to do this?


回答1:


You should be using pandas own ExcelWriter class:

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

Then the save_xls function works as expected:

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:


In case anyone needs an example of how to do this with a dictionary of dataframes:

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

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



来源:https://stackoverflow.com/questions/14225676/save-list-of-dataframes-to-multisheet-excel-spreadsheet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!