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

pandas使用for循环无法向Excel写入多个工作表问题求解

问题根因

原代码无法生成多工作表的核心问题有两点:

  • 循环内反复执行df_output.to_excel(file_name),该语句默认以覆盖模式写入文件,每跑一次循环就会把之前写入的所有工作表全部清空,最终只会留下该语句生成的默认空Sheet1
  • 每次循环单独打开追加模式写入器时,文件已经被前序的覆盖操作重置,只有最后一轮循环的追加内容会被保留,因此最终仅能看到最后一个目标工作表。
修复方案

优先推荐把整个循环放在同一个ExcelWriter上下文管理器中执行,不需要反复开关文件,不会出现覆盖问题,性能也更好,修正后的完整代码如下:

import pandas as pd

file_name = 'Output.xlsx'
# 初始化写入器,首次创建文件使用写入模式,指定openpyxl引擎
with pd.ExcelWriter(file_name, engine="openpyxl", mode="w") as writer:
    for sheet in sheets:
        # 原有计算、处理、切片逻辑保持不变
        <do calculations>
        <do manipulations>
        <do slicing>
        
        print("Writing Output Sheet " + sheet)
        # 注意替换为实际存储输出结果的DataFrame变量名,原代码混用了df_output和df,需统一
        df_output.to_excel(writer, sheet_name=sheet, index=False)

如果你的业务场景需要拆分写入步骤(比如循环逻辑分布在不同代码块、无法全部包裹在同一个上下文里),可以使用追加模式的写法,注意创建空文件的操作只能执行一次,不要放在循环内:

# 仅首次运行时执行一次,创建空的输出文件
pd.DataFrame().to_excel(file_name)

# 后续循环逐表追加
for sheet in sheets:
    <do calculations>
    <do manipulations>
    <do slicing>
    print("Writing Output Sheet " + sheet)
    with pd.ExcelWriter(
        file_name,
        engine="openpyxl",
        mode="a",
        if_sheet_exists="replace"
    ) as writer:
        df_output.to_excel(writer, sheet_name=sheet, index=False)
注意事项
  • 写入Excel时统一使用存储最终处理结果的DataFrame变量,原代码混用df_output和df会导致写入内容不符合预期
  • 传入index=False参数可以避免把pandas默认生成的行索引写入Excel,不需要可以删除该参数
  • 禁止在循环内执行不带writer参数的df.to_excel(文件路径)语句,这类操作默认会覆盖整个文件,清空之前写入的所有内容
  • 原代码打印日志里的Ouput为拼写错误,正确拼写为Output,不影响功能但建议修正

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:48:15