无法将熊猫数据框附加到现有的 Excel 工作表

Posted

技术标签:

【中文标题】无法将熊猫数据框附加到现有的 Excel 工作表【英文标题】:unable to append pandas Dataframe to existing excel sheet 【发布时间】:2020-01-15 20:51:14 【问题描述】:

我对 Python/Pandas 很陌生。我有一种情况,我必须每周用新数据更新现有工作表。这个“新”数据基本上是来自每周生成的原始 csv 文件的处理数据,我已经编写了一个 python 代码来生成这个“新”数据,它基本上是我代码中的 pandas Dataframe。现在我想将此 Dataframe 对象附加到我的 excel 工作簿中的现有工作表中。我已经在使用下面的代码将 DF 写入 XL 工作簿到特定的工作表中。

workbook_master=openpyxl.load_workbook('C:\Claro\Pre-Sales\E2E Optimization\Transport\Transport Network Dashboard.xlsx')

writer=pandas.ExcelWriter('C:\Claro\Pre-Sales\E2E Optimization\Transport\Transport Network Dashboard.xlsx',engine='openpyxl',mode='a')

df_latency.to_excel(writer,sheet_name='Latency',startrow=workbook_master['Latency'].max_row,startcol=0,header=False,index=False)

writer.save()
writer.close()

现在的问题是,当我运行代码并打开 excel 文件时,代码不会将数据框写入现有工作表“延迟”,而是创建一个新工作表“延迟 1”并将数据框写入其中。 Dataframe 的内容和定位是正确的,但我不明白为什么代码创建一个新的工作表“Latency1”而不是将 Dataframe 写入现有的工作表“Latency”

将不胜感激任何帮助。

谢谢 法希姆

【问题讨论】:

【参考方案1】:

默认情况下,当ExcelWriter 被实例化时,它假定一个没有工作表的新空工作簿。

因此,当您尝试将数据写入“延迟”时,它会创建一个新的空白工作表。此外,openpxyl 库在写入之前会执行检查以“避免重复名称”(请参阅​​openpxyl docs : line 18),这会以数字方式增加工作表名称以写入“Latency1”。

要解决此问题,请在创建 writer 后将现有工作表复制到 ExcelWriter.sheets 属性中。 像这样:

writer.sheets = dict((ws.title, ws) for ws in workbook_master.worksheets)

【讨论】:

非常感谢加里。这解决了这个问题。但我不明白为什么 ExcelWriter 在创建对象时不实例化书籍和工作表,特别是当 mode='a' 加上它也没有在 ExcelWriter 文档中提到有关此问题的任何地方。因此,除非您分析 ExcelWriter 代码并破解它,否则您将无法弄清楚。无论如何,为此非常感谢。真的解决了我的问题! 是的,我同意这令人困惑。或许我们应该为这个用例在 github 上为 pandas 创建一个 issue,以提高可用性。

以上是关于无法将熊猫数据框附加到现有的 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章

使用熊猫将数据框附加到excel

如何将熊猫数据添加到现有的 csv 文件中?

如何将 Excel 转换为 JSON 并将其附加到现有的 JSON 文件?

无法在不覆盖的情况下将 R 数据框附加到现有 Excel 中

附加到现有的json文件

ValueError 将多索引熊猫数据框转换为 Excel