繁体   English   中英

将多个数据框多次保存到多个Excel工作表?

[英]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.

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