将多个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
相关产品推荐
相关产品推荐

