我对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”
非常感谢您的帮助。
谢谢 法赫姆
答案 0 :(得分:0)
默认情况下,实例化ExcelWriter
时,它将假定没有工作表的新的空白工作簿。
因此,当您尝试将数据写入“延迟”时,它会创建一个新的空白工作表。此外,openpxyl
库在写入“避免重复的名称”(请参阅openpxyl docs : line 18)之前执行检查,这会以数字方式将工作表名称递增为“ Latency1”。
要解决此问题,请在创建ExcelWriter.sheets
之后将现有的工作表复制到writer
属性中。
像这样:
writer.sheets = dict((ws.title, ws) for ws in workbook_master.worksheets)