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

Pandas向Excel指定工作表追加数据时如何保留其他工作表?

解决Excel追加数据时保留其他工作表的问题

你的代码问题在于:pd.ExcelFile是只读的文件对象,直接用to_excel写入这个对象时,会生成仅包含当前DataFrame的新文件,覆盖原文件的所有其他工作表。要保留所有工作表,可采用以下两种方案:

方法一:读取所有工作表后重新写入(兼容所有Excel格式)

该方法先将原文件所有工作表读入内存,更新log表后再全部写回,适用于.xls和.xlsx格式:

import pandas as pd

# 读取原文件所有工作表,存储为字典(键=表名,值=对应DataFrame)
xls = pd.ExcelFile('myfile.xlsx')
sheet_data = {sheet: xls.parse(sheet) for sheet in xls.sheet_names}

# 构造新增数据并追加到log表
new_data = {'Date': [2023], 'Time': [180855], 'Q': ['2']}
df_new = pd.DataFrame(new_data)
sheet_data['log'] = pd.concat([sheet_data['log'], df_new], ignore_index=True)

# 将所有工作表写回原文件
with pd.ExcelWriter('myfile.xlsx') as writer:
    for sheet_name, df in sheet_data.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False)

方法二:直接追加并替换log表(仅适用于.xlsx格式)

如果是.xlsx文件,可借助openpyxl引擎以追加模式写入,无需读取所有工作表,效率更高:

需先安装依赖库:pip install openpyxl

import pandas as pd

# 读取原log表数据
df_log = pd.read_excel('myfile.xlsx', sheet_name='log')

# 构造新增数据并合并
new_data = {'Date': [2023], 'Time': [180855], 'Q': ['2']}
df_final = pd.concat([df_log, pd.DataFrame(new_data)], ignore_index=True)

# 以追加模式打开文件,替换原log表
with pd.ExcelWriter(
    'myfile.xlsx',
    mode='a',
    engine='openpyxl',
    if_sheet_exists='replace'
) as writer:
    df_final.to_excel(writer, sheet_name='log', index=False)

关键注意事项

  • 写入时务必添加index=False,避免将DataFrame的索引列写入Excel。
  • 方法二中if_sheet_exists='replace'会用合并后的新数据替换原log表,避免重复表头;若用overlay会直接在原数据后追加(会重复表头,不推荐)。
  • 处理.xls格式文件只能用方法一,因为xlwt引擎不支持追加模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:22:31