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

使用to_excel写入多Sheet失败:仅最后一个Sheet生效

Pandas写入多Sheet仅最后一个生效的解决方法

问题描述

执行以下代码尝试向Excel文件写入多个Sheet:

df[df['Location'] == 'place1'].to_excel(updated_excel, sheet_name='place1', index=False)
df[df['Location'] == 'place2'].to_excel(updated_excel, sheet_name='place2', index=False)
df[df['Location'] == 'place3'].to_excel(updated_excel, sheet_name='place3', index=False)
df[df['Location'] == 'place4'].to_excel(updated_excel, sheet_name='place4', index=False)

打开文件后仅保留place4对应的Sheet,其余写入操作均未生效,尝试with语句后问题依旧。

问题原因

每次直接调用to_excel并传入文件路径时,Pandas会默认创建新的Excel文件,覆盖之前的内容。只有最后一次写入操作的结果会被保留,前面的Sheet都会被覆盖。

解决方案

必须使用pd.ExcelWriter对象来管理多Sheet的写入流程,确保所有Sheet都被添加到同一个文件中。

基础实现

import pandas as pd

# 通过ExcelWriter统一管理写入会话
with pd.ExcelWriter(updated_excel) as writer:
    df[df['Location'] == 'place1'].to_excel(writer, sheet_name='place1', index=False)
    df[df['Location'] == 'place2'].to_excel(writer, sheet_name='place2', index=False)
    df[df['Location'] == 'place3'].to_excel(writer, sheet_name='place3', index=False)
    df[df['Location'] == 'place4'].to_excel(writer, sheet_name='place4', index=False)

简化写法(循环处理)

如果需要写入的Sheet较多,可通过循环减少重复代码:

import pandas as pd

target_places = ['place1', 'place2', 'place3', 'place4']

with pd.ExcelWriter(updated_excel) as writer:
    for place in target_places:
        df[df['Location'] == place].to_excel(writer, sheet_name=place, index=False)

关键说明

  • ExcelWriter会维持一个持续的文件写入会话,所有Sheet写入操作都基于该会话执行,不会覆盖已有内容。
  • 使用with语句可自动完成文件的打开与关闭,无需手动调用writer.save()或writer.close()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:03:24