Python 是否多次将多个数据框保存到多个excel工作表?

Python 是否多次将多个数据框保存到多个excel工作表?,python,excel,pandas,function,dataframe,Python,Excel,Pandas,Function,Dataframe,我有一个将多个数据框作为多个表保存到单个excel工作簿工作表的功能: def multiple_dfs(df_list, sheets, file_name, spaces): writer = pd.ExcelWriter(file_name,engine='xlsxwriter') row = 0 for dataframe in df_list: dataframe.to_excel(writer,sheet_name=sheets,star

我有一个将多个数据框作为多个表保存到单个excel工作簿工作表的功能:

def multiple_dfs(df_list, sheets, file_name, spaces):
    writer = pd.ExcelWriter(file_name,engine='xlsxwriter')   
    row = 0
    for dataframe in df_list:
        dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)   
        row = row + len(dataframe.index) + spaces + 1
    writer.save()
如果我多次调用此函数以将多个表写入多个工作表,那么最终只会得到一个工作簿和一个工作表,即上次调用的工作表:

multiple_dfs(dfs_gfk, 'GFK', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_top, 'TOP', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_all, 'Total', 'file_of_tables.xlsx', 1)

因此,最后我只有
表格文件
工作簿,只有
总计
表格。我知道这是一个简单的问题,但不知何故,我想不出任何优雅的解决办法。有人能帮忙吗?

获取
writer
外部功能,包括:


pandas.ExcelWriter

在创建
ExcelWriter
类的实例时,
mode
关键字很重要

mode='w'
为文件分配空间(当您调用
.save()
.close()
时,它会为文件分配空间,如果已经存在文件,则会覆盖文件

mode='a'
假定存在一个现有文件并附加到该文件上。如果要保持代码的结构,必须添加一行小代码,如下所示:

import pandas as pd
import os

def multiple_dfs(df_list, sheets, file_name, spaces):
    arg_mode = 'a' if file_name in os.getcwd() else 'w' # line added
    writer = pd.ExcelWriter(file_name, engine='xlsxwriter', mode=arg_mode) # added mode argument
    row = 0

    for dataframe in df_list:
        dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)   
        row = row + len(dataframe.index) + spaces + 1
    writer.save()
如果随后运行以下一系列代码:


最后一次(和第二次函数调用)不会覆盖当前写入其中的数据。相反,第一个函数调用创建文件,然后第二个和第三个函数调用附加数据。现在,您的函数应该可以工作了。

喜欢这个解释。谢谢:)很乐意帮助:)为什么在简短的解释中使用
with
,而不是在建议的解决方案中使用?@MaartenFabré第一个代码块中的
with
来自
pandas的文档。ExcelWriter
可在此处找到:是。使用它是很好的练习。为什么不在解决方案中使用它呢?
save()
调用有效地关闭了整个工作簿。将其移出函数。
You can also append to an existing Excel file:

>>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer:
...     df.to_excel(writer, sheet_name='Sheet3')
import pandas as pd
import os

def multiple_dfs(df_list, sheets, file_name, spaces):
    arg_mode = 'a' if file_name in os.getcwd() else 'w' # line added
    writer = pd.ExcelWriter(file_name, engine='xlsxwriter', mode=arg_mode) # added mode argument
    row = 0

    for dataframe in df_list:
        dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)   
        row = row + len(dataframe.index) + spaces + 1
    writer.save()
multiple_dfs(dfs_gfk, 'GFK', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_top, 'TOP', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_all, 'Total', 'file_of_tables.xlsx', 1)