Python 将数据框列表保存到多页Excel电子表格

Python 将数据框列表保存到多页Excel电子表格,python,pandas,openpyxl,Python,Pandas,Openpyxl,如何将数据帧列表导出到一个Excel电子表格中? 州政府的文件: 注意事项 如果传递现有ExcelWriter对象,则将添加工作表 添加到现有工作簿。这可以用来保存不同的数据 数据帧到一个工作簿 writer=ExcelWriter('output.xlsx') df1.to_excel(writer,'sheet1') df2.to_excel(writer,'sheet2') writer.save() 接下来,我想我可以编写一个函数,将数据帧列表保存到一个电子表格中,如下所示: from

如何将数据帧列表导出到一个Excel电子表格中?
州政府的文件:

注意事项
如果传递现有ExcelWriter对象,则将添加工作表 添加到现有工作簿。这可以用来保存不同的数据 数据帧到一个工作簿

writer=ExcelWriter('output.xlsx')

df1.to_excel(writer,'sheet1')

df2.to_excel(writer,'sheet2')

writer.save()

接下来,我想我可以编写一个函数,将数据帧列表保存到一个电子表格中,如下所示:

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()
但是(如果列表中有两个小数据框,每个小数据框可以单独保存到excel中),则会引发异常(编辑:已删除回溯):


大概我没有正确地呼叫,我应该如何才能做到这一点?

您应该使用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()

如果任何人需要使用数据帧字典的示例:

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()
例如:
save\u xls(dict\u df=my\u dict,path='~/my\u path.xls')

如果数据框中存在一些不支持的字符类型,有时可能会出现问题(编写包含unicode的excel文件)。为了克服这个问题,我们可以使用“xlsxwriter”包,如下所示:

有关以下代码:

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()
我得到的错误是“非法字符错误”

有效的代码:

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

你觉得这速度如何?我昨天也试着做同样的事情,发现在一个配备固态驱动器的像样工作站上,将2000列的数据帧写入一个.xlsx文件大约需要16秒/100行。ipython中使用%prun进行的一些快速分析表明,这是由于XML处理造成的。最后,我通过CSV获得了Excel数据,因为ExcelWriter的速度慢得令人望而却步。2018年仍然如此。您还可以使用
ExcelWriter
作为上下文管理器<代码>使用ExcelWriter(xls\U路径)作为编写器:df.to\u excel(编写器,工作表\u名称)谢谢Andy。请您解释一下
“工作表%s”%n
位好吗?它是做什么的?它是如何工作的?@BowenLiu,这只是将工作表命名为sheet1、sheet2等。这真的拯救了我的一天。但有一件事我不明白,尽管它奏效了。部件
'%s'%key
的作用是什么?你能解释一下吗?谢谢@获取字典键值并将其用作excel工作表中的页面名称的BowenLiu。“%s'是一个用“键”填充的占位符。希望这能有所帮助。它对我来说非常有用,只是增加了一点:最后添加
writer.close()
。我安装了Python3.7和Windows10,MicrosoftExcel不会保存对文件所做的更改,因为python将访问它。
%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()