You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何解决Pandas将两个DataFrame写入已有Excel文件时Sheet1已存在的错误并保留原有工作表?

解决Pandas追加写入Excel时Sheet已存在的问题

这个问题的核心是openpyxl在追加模式下默认不允许覆盖已存在的工作表,而xlsxwriter确实只支持创建新文件(会覆盖原有内容),所以我们可以用openpyxl的if_sheet_exists参数或者手动删除旧工作表来解决。

方案1:直接替换已存在的Sheet1(推荐)

如果你的需求是用新数据完全替换掉原有的Sheet1,只需要在初始化ExcelWriter时添加if_sheet_exists='replace'参数即可,这个参数会自动替换掉已存在的同名工作表:

import pandas as pd

# 读取源数据
df = pd.read_excel("Data Set Finished.xlsx", sheet_name="Details")
df2 = df.sum(axis=1)

# 初始化Writer,指定替换已存在的Sheet1
writer = pd.ExcelWriter(
    "Data Set Finished.xlsx",
    engine="openpyxl",
    mode="a",
    if_sheet_exists="replace"
)

# 写入主DataFrame到Sheet1(从A1开始)
df.to_excel(writer, sheet_name="Sheet1", index=False)
# 写入求和结果到Sheet1的第2行第13列(startrow/startcol从0开始计数)
df2.to_excel(writer, sheet_name="Sheet1", startrow=1, startcol=12, index=False, header=False)

# 务必保存并关闭Writer
writer.close()

注意:if_sheet_exists参数是Pandas 1.4.0及以上版本才支持的,如果你用的是旧版本Pandas,需要先升级(pip install --upgrade pandas),或者用下面的方案。

方案2:先删除旧Sheet1再创建新的

如果你担心替换操作会有意外,或者用的是低版本Pandas,可以先手动加载Excel文件,删除已存在的Sheet1,再执行写入操作:

import pandas as pd
from openpyxl import load_workbook

# 第一步:加载现有工作簿并删除Sheet1(如果存在)
wb = load_workbook("Data Set Finished.xlsx")
if "Sheet1" in wb.sheetnames:
    wb.remove(wb["Sheet1"])
wb.save("Data Set Finished.xlsx")

# 第二步:读取数据并写入新的Sheet1
df = pd.read_excel("Data Set Finished.xlsx", sheet_name="Details")
df2 = df.sum(axis=1)

writer = pd.ExcelWriter("Data Set Finished.xlsx", engine="openpyxl", mode="a")
df.to_excel(writer, sheet_name="Sheet1", index=False)
df2.to_excel(writer, sheet_name="Sheet1", startrow=1, startcol=12, index=False, header=False)

writer.close()

小提示

你的df2是一个Series,如果你想给它添加列名(比如"行总计"),可以把它转成DataFrame:

df2 = pd.DataFrame(df.sum(axis=1), columns=["行总计"])

这样写入时如果去掉header=False,就能保留列名啦。

内容的提问来源于stack exchange,提问作者sendhelppls

火山引擎 最新活动