简体   繁体   English

将 DataFrame 列表保存到多表 Excel 电子表格

[英]Save list of DataFrames to multisheet Excel spreadsheet

How can I export a list of DataFrames into one Excel spreadsheet?如何将 DataFrame 列表导出到一个 Excel 电子表格中?
The docs for to_excel state: to_excel状态的文档:

Notes笔记
If passing an existing ExcelWriter object, then the sheet will be added to the existing workbook.如果传递现有 ExcelWriter 对象,则工作表将添加到现有工作簿中。 This can be used to save different DataFrames to one workbook这可用于将不同的 DataFrame 保存到一个工作簿

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:在此之后,我想我可以编写一个函数,将 DataFrame 列表保存到一个电子表格中,如下所示:

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) :但是(有两个小 DataFrame 的列表,每个都可以单独保存to_excel ),引发异常(编辑:已删除回溯)

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

Presumably I am not calling ExcelWriter correctly, how should I be in order to do this?大概我没有正确调用ExcelWriter ,我应该怎么做才能做到这一点?

You should be using pandas own ExcelWriter class:您应该使用熊猫自己的ExcelWriter类:

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

Then the save_xls function works as expected:然后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()

In case anyone needs an example using 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 separate 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')示例: save_xls(dict_df = my_dict, path = '~/my_path.xls')

Sometimes there can be issues(Writing an excel file containing unicode), if there are some non supporting character type in the data frame.如果数据框中存在一些不支持的字符类型,有时可能会出现问题(编写包含 unicode 的 excel 文件)。 To overcome it we can use ' xlsxwriter ' package as in below case:为了克服它,我们可以使用“ xlsxwriter ”包,如下所示:

for below code:对于以下代码:

from pandas import ExcelWriter
import xlsxwriter
writer = ExcelWriter('notes.xlsx')
for key in dict_df:
        data[key].to_excel(writer, key,index=False)
writer.save()

I got the error as "IllegalCharacterError"我收到的错误是“IllegalCharacterError”

The code that worked:有效的代码:

%pip install xlsxwriter
from pandas import ExcelWriter
import xlsxwriter
writer = ExcelWriter('notes.xlsx')
for key in dict_df:
        data[key].to_excel(writer, key,index=False,engine='xlsxwriter')
writer.save()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM