使用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
相关产品推荐
相关产品推荐

