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

Python单for循环与多列表推导式处理400万行Pandas数据的速度对比疑问

性能对比结论
  1. 你当前使用的逐行调用iloc访问/赋值DataFrame的写法是所有方案中性能最差的:每次iloc操作都会触发Pandas的索引校验、类型检查等额外开销,400万行规模下耗时会是向量化操作的几十到上百倍。
  2. 针对你关心的单轮for循环和多条列表推导的对比:列表推导本身的执行效率确实高于普通Python for循环,因为其迭代逻辑在C层面实现,省去了Python字节码循环的额外开销。但如果拆分为10+条列表推导,相当于需要完整遍历10+次全量数据,400万行规模下,多次遍历的开销会完全覆盖列表推导的性能优势,此时整合所有操作的单轮for循环(遍历Python原生序列而非DataFrame的iloc)性能会优于多条列表推导。
针对Pandas数据治理场景的优化建议
  • 优先选择Pandas向量化操作实现所有处理逻辑,完全避免Python层面的循环
    你示例中的两个处理逻辑可以直接改写为向量化实现,性能提升最明显:
    # 生成Price_Dummy,错误值默认转为0/可按需求调整
    dataframe["Price_Dummy"] = (dataframe["Price"].astype(str) != "0").astype(int)
    
    # Size单位统一转换为MB
    size_split = dataframe["Size"].str.split(expand=True)
    size_num = pd.to_numeric(size_split[0], errors="coerce")
    size_unit = size_split[1].str.lower()
    unit_map = {"kb": 1/1000, "mb": 1, "gb": 1000}
    dataframe["Size"] = size_num * size_unit.map(unit_map)
    
    上述实现无需显式循环,所有逻辑都在Pandas底层执行,400万行规模下耗时通常在秒级。
  • 若存在无法用向量化实现的复杂逻辑,优先将DataFrame列转为Python原生列表后做单轮遍历,处理完成后统一赋值回DataFrame,不要在循环中反复调用iloc操作DataFrame。
  • 若确实需要在Python层面实现循环,优先选择单轮循环整合所有处理逻辑,而非拆分为多条列表推导:百万行级以上的数据集,多次遍历的开销远大于列表推导本身的性能增益。
百万行规模下的常见方案性能参考
  • 逐行iloc循环:约180~220s/100万行
  • 10条列表推导:约25~35s/100万行
  • 单轮遍历Python原生列表处理:约7~12s/100万行
  • Pandas向量化操作:约0.3~1s/100万行

内容的提问来源于stack exchange,提问作者KArrow'sBest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:03