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

And*_*den 69 python pandas openpyxl

如何将DataFrame列表导出到一个Excel电子表格中?
国家文件to_excel:

注意
如果传递现有的ExcelWriter对象,则表单将添加到现有工作簿中.这可用于将不同的DataFrame保存到一个工作簿

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

在此之后,我想我可以编写一个函数,将一个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()
Run Code Online (Sandbox Code Playgroud)

但是(带有两个小DataFrame的列表,每个都可以to_excel单独保存),会引发异常(编辑:删除跟踪):

AttributeError: 'str' object has no attribute 'worksheets'
Run Code Online (Sandbox Code Playgroud)

大概是我没有ExcelWriter正确地打电话,我应该怎么做才能做到这一点?

And*_*den 105

你应该使用pandas自己的ExcelWriter类:

from pandas import ExcelWriter
# from pandas.io.parsers import ExcelWriter
Run Code Online (Sandbox Code Playgroud)

然后该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()
Run Code Online (Sandbox Code Playgroud)

  • 你怎么找到这个的速度?昨天我尝试做同样的事情,发现用一个带有2000列的数据帧写入.xlsx文件,在一个体面的固态驱动器工作站上,每100行占用大约16个.在ipython中使用%prun进行的一些快速分析表明这是由于XML处理.最后,我通过CSV获取Excel数据,因为ExcelWriter速度非常慢. (11认同)
  • 2018年仍然缓慢. (5认同)
  • ...什么工具! (3认同)
  • 您还可以使用“ExcelWriter”作为上下文管理器。`以 ExcelWriter(xls_path) 作为作者:df.to_excel(writer, sheet_name)` (2认同)
  • 谢谢安迪。你介意解释一下 `'sheet%s' %n` 位吗?它有什么作用以及它是如何工作的? (2认同)
  • @BowenLiu 这只是将工作表命名为工作表 1、工作表 2 等。 (2认同)
  • 这似乎会覆盖现有文件。如何写入和保存现有文件?谢谢 (2认同)

Jar*_*rks 5

如果有人需要使用数据帧字典的示例,请执行以下操作:

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()
Run Code Online (Sandbox Code Playgroud)

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

  • 它对我来说非常有用,只需添加一点:在末尾添加“writer.close()”。我有 python 3.7 和 windows 10 设置,Microsoft Excel 不会保存对文件所做的更改,因为 python 将访问它。 (2认同)