无法将Pandas Dataframe附加到现有的Excel工作表

时间:2019-09-14 05:36:19

标签: python excel pandas dataframe openpyxl

我对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文件时,代码没有将数据帧写入现有工作表“ Latency”,而是创建了一个新工作表“ Latency1”并将数据帧写入其中。数据框的内容和位置是正确的,但我不明白为什么代码会创建一个新的工作表“ Latency1”,而不是将数据框写入现有的工作表“ Latency”

非常感谢您的帮助。

谢谢 法赫姆

1 个答案:

答案 0 :(得分:0)

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

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

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

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