【问题标题】:create multiple dataframes in loop and write to excel循环创建多个数据框并写入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 循环之外,这样它就会在其中打开和关闭一次,而不是每次迭代都覆盖它
  • 乔恩·克莱门茨,你是个明星,这就像一种享受。 :-)

标签: python excel pandas dataframe append


【解决方案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)}')

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 2015-08-18
    • 2022-11-22
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多