【问题标题】:Pandas ExcelWriter overwriting sheets using for loopPandas ExcelWriter 使用 for 循环覆盖工作表
【发布时间】:2021-05-21 19:40:52
【问题描述】:

我有一个嵌套的 for 循环,它从具有多个工作表的主文件中获取数据,并按用户为每个工作表拆分数据。然后我想用与主文件相同的表格将每个用户的数据写入他们自己的文件。

这是我目前所拥有的:

tm_sheet_to_df_map = pd.read_excel(src_file_tm, sheet_name=None)

for key, value in sorted(tm_sheet_to_df_map.items(),reverse=True):           
    tm_group = value.groupby('TM')
    for TM, group_df in tm_group:
        attachment = attachment_path_tm / f'{TM}' / f'Q221 New Accounts - {TM}.xlsx'
        attachment1 = os.makedirs(os.path.dirname(attachment), exist_ok=True)
        writer = ExcelWriter(attachment, engine = 'xlsxwriter')
        group_df.to_excel(writer, sheet_name =f'{key}', index=False)
        writer.save()

问题 - 上述脚本为每个用户创建一个新文件,但只会将最终数据帧写入每个文件,而不是添加主文件中的所有工作表。任何想法如何将每张纸写入单个文件?我试过搬家 writer.save() 在循环之外没有运气。

【问题讨论】:

  • group_df.to_excel(writer, sheet_name =f'{key}', index=False) writer.save() 在每个循环中执行,您可能只想在最后执行它,所以将它放在循环之外的末尾
  • 我尝试了您的建议,将这些项目移到循环的末尾和外部。但是,Excel 文件中没有数据。它们是空白的。

标签: python pandas openpyxl xlsxwriter pandas.excelwriter


【解决方案1】:

您需要 ExcelWriter 的“追加”模式:


try:
    # append mode will fail if file does not exist
    writer = ExcelWriter(attachment, engine = 'openpyxl', mode="a")
except FileNotFoundError:
    writer = ExcelWriter(attachment, engine = 'openpyxl')

ExcelWriter docs

【讨论】:

  • ValueError:xlsxwriter 不支持追加模式!
  • 您可以尝试其他引擎,例如openpyxl
  • 我试过 openpyxl 但收到以下错误:FileNotFoundError: [Errno 2] No such file or directory
  • 您可能需要在w 模式下打开第一个电子表格。
  • @Mark,更新了我的答案,现在应该可以正常工作了
猜你喜欢
  • 2019-07-21
  • 2021-12-03
  • 2016-07-17
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多