使用 Excelwriter 将 DataFrame 写入新的 sheet 会删除所有其他 sheet,即使在使用追加模式时也是如此
Using Excelwriter to write a DataFrame to a new sheet deletes all other sheets even when using append mode
我有一个要附加到的 .xlsx 文件。我正在使用:
excel_writer = pd.ExcelWriter('asdf.xlsx', engine='openpyxl', mode='a')
df.to_excel(excel_writer, sheet_name='dummy', index=False)
excel_writer.close()
确实成功创建了 sheet 'dummy',但删除了 'asdf.xlsx' 中所有其他现有的 sheet。我正在使用追加模式,所以我不太确定还有什么地方可以检查。
运行 Pandas 版本 0.20.1
我尝试了 docs for 0.20.1 中的代码,但它也覆盖了所有内容。
If passing an existing ExcelWriter object, then the sheet will be
added to the existing workbook. This can be used to save different
DataFrames to one workbook:
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
此答案的一部分基于
我有一个要附加到的 .xlsx 文件。我正在使用:
excel_writer = pd.ExcelWriter('asdf.xlsx', engine='openpyxl', mode='a')
df.to_excel(excel_writer, sheet_name='dummy', index=False)
excel_writer.close()
确实成功创建了 sheet 'dummy',但删除了 'asdf.xlsx' 中所有其他现有的 sheet。我正在使用追加模式,所以我不太确定还有什么地方可以检查。 运行 Pandas 版本 0.20.1
我尝试了 docs for 0.20.1 中的代码,但它也覆盖了所有内容。
If passing an existing ExcelWriter object, then the sheet will be added to the existing workbook. This can be used to save different DataFrames to one workbook:
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
此答案的一部分基于