You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python向已有150行数据的Excel文件追加DataFrame?

问题描述

我有一个包含150行数据的Excel工作表,希望使用Python将一个DataFrame追加到该工作表中,且不删除或替换原有数据。我尝试了以下代码,但它会删除Excel中的原有内容并写入DataFrame:

import pandas as pd
import openpyxl

workbook = openpyxl.load_workbook("test.xlsx")
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')
writer.book = workbook
writer.sheets = dict((ws.title, ws) for ws in workbook.worksheets)
data_df.to_excel(writer, 'Existing_sheetname')
writer.save()
writer.close()

我还尝试了一些其他解决方案,但都没有效果。恳请各位提供建议。

解决方案

你的代码核心问题是没指定DataFrame的写入起始位置,默认会从第1行开始覆盖原有内容。只需先获取目标工作表的已有行数,从下一行开始写入即可:

import pandas as pd
from openpyxl import load_workbook

# 加载现有工作簿并获取目标工作表
wb = load_workbook("test.xlsx")
target_sheet = wb["Existing_sheetname"]
# 获取已有数据的最后一行行号,新数据从下一行开始写入
start_row = target_sheet.max_row

# 用with上下文管理器初始化ExcelWriter,确保资源正常释放
with pd.ExcelWriter(
    "test.xlsx",
    engine="openpyxl",
    mode="a",
    if_sheet_exists="overlay"
) as writer:
    # 写入DataFrame:从start_row开始,不重复写表头、不写入索引
    data_df.to_excel(
        writer,
        sheet_name="Existing_sheetname",
        startrow=start_row,
        header=False,
        index=False
    )

关键细节说明:

  • mode="a" + if_sheet_exists="overlay":确保直接在已有工作表上追加数据,而非新建工作表或覆盖整个表
  • start_row = target_sheet.max_row:精准定位到现有数据的下一行,避免覆盖
  • header=False:如果原有数据已经有表头,关闭该参数避免重复写入;若原有数据无表头,可删除此参数
  • index=False:默认会写入DataFrame的索引列,根据需求决定是否保留

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:50:27