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

基于Pandas DataFrame修改现有Excel工作簿多个工作表的实现问题

替换Excel文件指定工作表为Pandas DataFrame的最小可行方案

嘿,我来帮你搞定这个需求!你要做的是把已有3个工作表的Excel文件里的两个,替换成Pandas DataFrame的数据,我先修正你代码里的小问题,再给一个完整的可运行示例:

先说说你现有代码的几个问题:

  • pd.ExcelWriter的参数写法有误,正确格式应该是文件路径+engine,还要通过writer.book关联已加载的工作簿
  • 缺少将DataFrame写入工作表的核心步骤,以及最终保存文件的操作
  • 路径和文件名重复定义,有点冗余

完整的最小可行示例(Pandas 1.4.0+版本推荐)

这个版本用了Pandas新增的if_sheet_exists='replace'参数,直接替换已有工作表,非常简洁:

import pandas as pd
from openpyxl import load_workbook

# 定义你的Excel文件路径
file_path = r"Libraries\Documents\Current_Standings.xlsx"

# 加载现有的Excel工作簿,保留未被替换的第三个工作表
existing_workbook = load_workbook(file_path)

# 用with语句初始化ExcelWriter,自动处理文件保存和关闭
with pd.ExcelWriter(
    file_path,
    engine='openpyxl',
    mode='a',  # 追加模式,保留原有工作簿内容
    if_sheet_exists='replace'  # 替换已存在的同名工作表
) as writer:
    # 把加载好的工作簿关联到writer上,这一步很关键!
    writer.book = existing_workbook
    
    # ----------------------
    # 替换成你自己的DataFrame
    # ----------------------
    # 示例DataFrame 1:对应要替换的第一个工作表
    df_sheet1 = pd.DataFrame({
        'Team': ['Lakers', 'Warriors'],
        'Wins': [42, 38]
    })
    # 示例DataFrame 2:对应要替换的第二个工作表
    df_sheet2 = pd.DataFrame({
        'Player': ['LeBron', 'Curry'],
        'Points_Per_Game': [27.1, 29.8]
    })
    
    # 将DataFrame写入指定工作表,index=False避免写入索引列
    df_sheet1.to_excel(writer, sheet_name='Standings', index=False)
    df_sheet2.to_excel(writer, sheet_name='Top_Players', index=False)

# with块结束后,文件会自动保存,不需要额外调用writer.save()

如果你用的是低版本Pandas(低于1.4.0)

可以先手动删除要替换的工作表,再写入新数据:

import pandas as pd
from openpyxl import load_workbook

file_path = r"Libraries\Documents\Current_Standings.xlsx"
existing_workbook = load_workbook(file_path)

# 先删除要替换的工作表(如果存在)
sheets_to_replace = ['Standings', 'Top_Players']
for sheet_name in sheets_to_replace:
    if sheet_name in existing_workbook.sheetnames:
        del existing_workbook[sheet_name]

with pd.ExcelWriter(file_path, engine='openpyxl', mode='a') as writer:
    writer.book = existing_workbook
    
    # 同样替换成你自己的DataFrame
    df_sheet1 = pd.DataFrame({
        'Team': ['Lakers', 'Warriors'],
        'Wins': [42, 38]
    })
    df_sheet2 = pd.DataFrame({
        'Player': ['LeBron', 'Curry'],
        'Points_Per_Game': [27.1, 29.8]
    })
    
    df_sheet1.to_excel(writer, sheet_name='Standings', index=False)
    df_sheet2.to_excel(writer, sheet_name='Top_Players', index=False)

关键注意点

  • 一定要关联writer.book = existing_workbook,否则会覆盖整个Excel文件,丢失未被替换的第三个工作表
  • index=False是可选的,如果你需要保留DataFrame的索引可以去掉
  • 替换的工作表名称要和原文件里的一致,不然会新增工作表而不是替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:49:16