使用Excelwriter将DataFrame写入新工作表会删除所有其他工作表,即使在使用附加模式时也是如此



我有一个.xlsx文件要附加到其中。我使用的是:

excel_writer = pd.ExcelWriter('asdf.xlsx', engine='openpyxl', mode='a')
df.to_excel(excel_writer, sheet_name='dummy', index=False)
excel_writer.close()

它确实成功地创建了一个工作表"dummy",但删除了"asdf.xlsx"中的所有其他现有工作表。我使用的是附加模式,所以我不太确定还能在哪里检查。运行Pandas 0.20.1版

我在0.20.1的文档中尝试了代码,但它也覆盖了所有内容。

如果传递现有的ExcelWriter对象,则工作表将已添加到现有工作簿。这可以用来保存不同的数据帧到一个工作簿:

writer = pd.ExcelWriter('output.xlsx')
df1.to_excel(writer,'Sheet1')
df2.to_excel(writer,'Sheet2')
writer.save()

问题是,您误解了追加功能。这意味着,如果没有设置模式,您将附加到当前excel编写器,但创建一个新的空excel文件。您必须将ExcelWriter的模式设置为a(追加(。这将在每次运行时附加新的工作表:

import pandas as pd
from openpyxl import load_workbook
data = [
{"a": 1, "b": 2}
]
df = pd.DataFrame(data)
df2 = pd.DataFrame(data)
book = load_workbook("output.xlsx")
writer = pd.ExcelWriter('output.xlsx', mode="a")
if "Sheet11" not in book.sheetnames:
df.to_excel(writer, 'Sheet11')
if "Sheet21" not in book.sheetnames:
df2.to_excel(writer, 'Sheet21')
writer.save()
print(book.sheetnames)

编辑:
添加load_workbook
此答案的一部分基于此答案

最新更新