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

Pandas导出大型Excel文件:新版本性能劣化问题求助

高版本pandas生成大XLSX文件性能暴跌的原因分析

结合你提供的测试对比数据,问题核心集中在pandas 2.x版本与openpyxl交互时的底层逻辑变化,以下是几个关键原因:

1. 数据类型序列化逻辑变更

pandas 2.x对object类型列的序列化逻辑做了调整,旧版本(1.2.4)会自动对重复字符串、数值做批量优化处理,减少单元格元数据的冗余存储;而新版本在配合openpyxl导出时,默认对每个单元格单独处理类型信息,尤其是非原生数值/日期类型的列,会生成更多的格式标记和冗余数据,直接导致文件体积暴涨,同时内存中需要维护大量单元格对象,占用率飙升。

2. ExcelWriter交互层重构

pandas 2.x重构了与openpyxl的交互模块,旧版本的ExcelWriter针对大规模数据做了批量写入优化——整列数据打包后传递给openpyxl处理,减少了Python与openpyxl之间的IO交互次数;而新版本改为更通用的逐单元格/逐行写入逻辑,虽然提升了兼容性,但在处理1000列+20万行的超大规模数据时,交互开销呈指数级增长,直接拉长了耗时。

3. 内存管理的中间对象冗余

pandas 2.x引入了Arrow作为部分数据处理的后端,但在导出为xlsx时,数据需要从Arrow格式转换为openpyxl可识别的格式,这个过程中会生成大量未被及时回收的中间对象。对比旧版本,新版本的内存回收机制对这类临时对象的处理效率降低,导致内存占用接近旧版本的4倍。

4. 默认优化策略的移除

旧版本pandas配合openpyxl时,默认开启了xlsx文件的样式复用优化——相同格式的单元格会共享同一个样式对象,减少重复存储;而新版本pandas可能默认关闭了该优化,或未适配openpyxl 3.x的样式API,导致每个单元格都单独存储格式信息,既增大了文件体积,也增加了内存中样式对象的数量。

验证方向建议

  • 强制指定列数据类型:将字符串列转为StringDtype,数值列指定精确的数值类型后再导出,观察性能变化。
  • 调整导出参数:尝试在to_excel中添加engine_kwargs={'options': {'strings_to_urls': False, 'data_only': True}},关闭不必要的格式转换。
  • 追踪内存使用:用memory_profiler定位导出过程中内存飙升的阶段,确认是数据转换还是写入环节的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:45:11