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

将多个Pandas DataFrame写入Excel仅成功首个工作表的问题排查

解决Pandas多个DataFrame写入Excel仅生成首个工作表的问题

嘿,这个问题我熟!你遇到的情况其实是因为ExcelWriter的生命周期管理不到位,导致只有第一个工作表被成功写入了。咱们来一步步搞定它:

问题根源

你的代码逻辑本身是对的,但手动创建ExcelWriter后仅调用save(),在某些Pandas版本或者环境下,可能无法确保所有工作表的写入操作都被正确提交。尤其是旧版本的Pandas中,这种写法容易出现数据丢失的情况。

推荐解决方案:使用上下文管理器(with语句)

这是目前Pandas官方推荐的写法,它会自动处理ExcelWriter的打开、保存和关闭,彻底避免手动操作的遗漏:

import pandas as pd

df_list = []
a = pd.DataFrame({'A':[1,2,3,4,5,6,7,8,9], 'B':[10,11,12,13,14,15,16,17,18]})
b = pd.DataFrame({'C':[11,22,33,44,55,66,77,88,99], 'D':[105,117,128,139,140,153,166,176,188]})
df_list.append(a)
df_list.append(b)

# 用with语句自动管理writer的生命周期
with pd.ExcelWriter('test_output.xlsx') as writer:
    for n, df in enumerate(df_list):
        df.to_excel(writer, sheet_name=f'sheet{n+1}')
# 不需要手动调用save()或close(),with块结束时会自动完成

备选方案:手动完善writer操作

如果你坚持不用上下文管理器,记得在save()后手动关闭writer,确保所有写入操作都被提交:

import pandas as pd

df_list = []
a = pd.DataFrame({'A':[1,2,3,4,5,6,7,8,9], 'B':[10,11,12,13,14,15,16,17,18]})
b = pd.DataFrame({'C':[11,22,33,44,55,66,77,88,99], 'D':[105,117,128,139,140,153,166,176,188]})
df_list.append(a)
df_list.append(b)

writer = pd.ExcelWriter('test_output.xlsx')
for n, df in enumerate(df_list):
    df.to_excel(writer, sheet_name=f'sheet{n+1}')
writer.save()
writer.close()  # 手动关闭writer,确保所有数据写入磁盘

特殊情况:旧版本Pandas兼容

如果你使用的是较旧的Pandas版本(0.20.x及以前),可能需要指定engine='openpyxl'来支持多工作表写入(针对.xlsx格式):

with pd.ExcelWriter('test_output.xlsx', engine='openpyxl') as writer:
    for n, df in enumerate(df_list):
        df.to_excel(writer, sheet_name=f'sheet{n+1}')

按照上面的方法修改后,你就能得到包含sheet1和sheet2的完整Excel工作簿啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:23:54