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

问题描述

我有一个要附加的.xlsx文件。我正在使用:

sites-available

会成功创建工作表“虚拟”,但删除“ asdf.xlsx”中所有其他现有工作表。我正在使用追加模式,所以我不太确定还有其他地方可以检查。 正在运行Pandas版本0.20.1

我尝试了docs for 0.20.1中的代码,但是它也覆盖了所有内容

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

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

解决方法

问题是您误解了附加功能。这意味着,您将追加到当前的excelwriter,但是如果未设置任何模式,则将创建一个新的空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
此答案的一部分基于this answer