循环创建多个数据框并写入excel

Posted

技术标签:

【中文标题】循环创建多个数据框并写入excel【英文标题】:create multiple dataframes in loop and write to excel 【发布时间】:2020-05-24 23:11:49 【问题描述】:

我正在一个生成数据帧的函数上运行一个循环,如下所示:

        Prd1    Prd2     Prd3    Prd4    Prd5    Prd6
Loc1    0        0        0        0       0       0
Loc2    0        0        0        0       0       0
Loc3    0      30.61      0        0   319.58   430.87  
Loc4    0        0        0        0       0    120.73
Loc5    0        0        0        0       0       0
Loc6    78.21  822.36     0        0       0       0

我想多次运行该函数,以生成一系列数据框,然后分析或可视化随时间推移的演变。为此,将它们全部放在一个 Excel 工作簿中是理想的。但是我正在努力解决这个问题。 我试过了

for case in CASES:
    B= A[case]
    result = function(B)
    print(result)
    with pd.ExcelWriter('results.xlsx') as writer:  # doctest: +SKIP
        result.to_excel(writer, sheet_name='case_'+str(case))

我希望这会将不同的结果写入同一个电子表格。但是,因此电子表格仅包含带有最后一种情况的选项卡。 我可以看到在 CASES 循环中的上述内容每次都会覆盖现有的工作表。 是否有保留已经存在的工作表并将任何新工作表“附加”到现有工作簿的功能? 提前致谢。 问候P。

【问题讨论】:

您需要将所有创建的数据帧保存到单个 csv 文件中吗? “循环每次都会覆盖现有的工作表。”:首先在df 中聚合,然后写入一次 pd.ExcelWriter 的开头移到 for 循环之外,这样它就会在其中打开和关闭一次,而不是每次迭代都覆盖它 乔恩·克莱门茨,你是个明星,这就像一种享受。 :-) 【参考方案1】:

根据这个SO thread,您可以在开始循环之前检索工作表名称列表并检查现有工作表并跳过它们。

xl = pd.ExcelFile('results.xlsx')
existing_sheets = xl.sheet_names

for case in CASES:
    if f'cast_str(case)' in existing_sheets:
        continue
    B= A[case]
    result = function(B)
    print(result)
    with pd.ExcelWriter('results.xlsx') as writer:  # doctest: +SKIP
        result.to_excel(writer, sheet_name=f'case_str(case)')

【讨论】:

以上是关于循环创建多个数据框并写入excel的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一循环中“从 .csv 读取并写入 excel”

如何用java把数据写入到excel

将用户定义的对象转换为数据框并写入 RDBMS - 如何维护与数据库的映射?

java jxl 大量数据写入excel,比如上千万条

java中怎么把数据写入excel

Labview在循环的每次迭代中将数据写入Excel文件