Pandas如何将两个DataFrame写入同一Excel的不同工作表
问题原因
- 首次写法的问题:每次直接调用
DataFrame.to_excel()写入同一路径的xlsx文件时,pandas默认使用覆盖写入模式,第二次写入会直接清空文件内第一次写入的全部内容,最终文件只会保留最后一次写入的单个工作表。 - 第二次写法的问题:创建
ExcelWriter对象完成所有工作表写入后,没有执行保存、关闭写入流的操作,文件内容没有完整写入磁盘,属于损坏的不完整文件,因此打开时会提示文件类型无效、无法正常读取。
正确实现方案
优先使用with上下文管理器写法,代码块执行结束后会自动完成文件保存、资源释放,不会出现漏保存的问题,参考代码如下:
import pandas as pd # 提前完成DataFrame合并逻辑 output_2df = pd.concat([installs, second_installs], ignore_index=True) output_qdf = pd.concat([a_questionnaires, b_questionnaires], ignore_index=True) # 初始化Excel写入器,指定openpyxl引擎适配xlsx格式 with pd.ExcelWriter('./installs.xlsx', engine='openpyxl') as writer: # 将不同DataFrame写入对应名称的工作表 output_2df.to_excel(writer, sheet_name='Answers', index=False) output_qdf.to_excel(writer, sheet_name='questionnaires', index=False)
如果不使用上下文管理器,手动操作写入器时,写完所有内容必须调用close()方法完成保存(新版pandas不推荐手动调用save()方法),参考写法:
writer = pd.ExcelWriter('./installs.xlsx', engine='openpyxl') output_2df.to_excel(writer, sheet_name='Answers', index=False) output_qdf.to_excel(writer, sheet_name='questionnaires', index=False) # 必须执行关闭操作完成内容落盘 writer.close()
注意事项:使用
openpyxl引擎前需要先安装对应依赖,未安装时可执行pip install openpyxl完成安装;代码中的index=False为可选参数,作用是不将pandas的默认行索引写入Excel,可根据实际需求选择是否添加。
内容的提问来源于stack exchange,提问作者user12270555
相关产品推荐
相关产品推荐

