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

Python Pandas嵌套循环运行过慢,如何优化按国家和LE_ID导出Excel的速度

性能问题核心原因
  • 重复线性扫描:原代码通过多次loc条件筛选+双层循环遍历,每筛选一个国家、一个LE_ID都要对对应数据集做一次全量扫描,30万行数据叠加5000个LE_ID的循环量,会产生大量冗余计算
  • 低效成员查询:内层循环中if id in unique_ids是列表的线性查找,单次查询时间和列表长度正相关,高频调用下耗时会被放大
  • 未利用Pandas内置优化能力:手动实现的分组逻辑远低于Pandas原生groupby的C语言实现的向量化分组效率
  • 冗余参数带来额外开销:传入的全量ID列表遍历逻辑会产生很多无效判断,大部分ID不属于当前国家,空跑了大量循环。
可落地的优化方案

1. 替换手动筛选为原生groupby分组(你二次更新的代码已经实现了这核心优化)

原生groupby会一次性完成所有国家、所有LE_ID的分组切割,避免了重复遍历数据集,仅此一项就能把运行时间从40分钟压缩到分钟级甚至秒级。同时原函数传入的countries、ids参数可以完全省略,groupby会自动提取数据集中所有存在的国家,以及每个国家下所有存在的LE_ID,不需要额外传参,也避免了传参和数据集不匹配导致的空sheet、漏导出的问题。

2. 更换更快的Excel写入引擎

默认的openpyxl写入速度较慢,可改用xlsxwriter引擎,写入速度可提升2~3倍,修改ExcelWriter初始化代码即可:

writer = pd.ExcelWriter(output, engine='xlsxwriter')

如果没有安装该依赖,执行pip install xlsxwriter安装即可。

3. 减少不必要的写入内容

导出Excel时默认会写入DataFrame的索引,如果你不需要索引可以关闭,减少IO耗时:

le_id_df.to_excel(writer, sheet_name=str(le_id), index=False)

如果只需要导出部分字段,可提前对数据集做列筛选,减少内存占用和写入量。

4. 固定变量提前声明

可把输出路径output_folder提到函数外层或者循环外层,避免每次循环都重复初始化路径对象。

额外注意事项

Excel的sheet名称最多支持31个字符,如果你的LE_ID长度超过限制,需要提前做截断处理,避免导出时报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:36:04