[英]Saving multiple dataframes to multiple excel sheets multiple times?
我有一个功能可以将多个数据框作为多个表保存到单个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)
所以最终我只有file_of_tables
工作簿,只有Total
表格。 我知道这是一个简单的问题,但是以某种方式,我只是想不出任何优雅的解决方案。 有人可以帮忙吗?
获得writer
外函数with
:
def multiple_dfs(df_list, sheets, writer, spaces):
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 pd.ExcelWriter('file_of_tables.xlsx') as writer:
multiple_dfs(dfs_gfk, 'GFK', writer, 1)
multiple_dfs(dfs_top, 'TOP', writer, 1)
multiple_dfs(dfs_all, 'Total', writer, 1)
从pandas.ExcelWriter
文档中 :
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')
在创建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()
如果然后运行以下代码系列:
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)
最后一个(和第二个函数调用)不会覆盖当前写入其中的数据。 相反,发生的情况是第一个函数调用创建了文件,然后第二个和第三个函数调用追加到了该数据。 现在,您的功能应该可以使用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.