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

如何高效遍历Pandas DataFrame?Python新手求优化方案

高效遍历/处理DataFrame元素的优化方案

嘿,作为Python新手能自己动手实现需求已经超棒了!不过你当前用iterrows()嵌套iteritems()的写法,在处理中等或较大规模的DataFrame时效率会比较拉胯——因为这两个方法本质上是在Python层面逐行、逐元素遍历,每次迭代都有不少额外开销,嵌套循环更是让效率雪上加霜。

最优方案:用Pandas向量化操作替代循环

Pandas的核心优势就是向量化计算,底层是用C实现的,速度比Python循环快好几个量级。你的需求是把每行的每个元素除以该行的总和,完全可以用一行向量化代码搞定:

import pandas as pd

# 直接生成结果,无需手动循环
weights = histCaps.div(histCaps.sum(axis=1), axis=0)

代码解释:

  • histCaps.sum(axis=1):计算DataFrame每行的总和(axis=1代表按行求和)
  • div()方法:指定axis=0,让每行的每个元素都除以对应的行总和,自动完成所有元素的计算,全程没有Python级别的循环

如果你确实需要遍历(不推荐此场景)

如果某些特殊场景下必须遍历,也别用iterrows(),换成itertuples()会更高效——它返回的是命名元组,比iterrows()返回的Series对象开销小很多:

weights = histCaps.copy()
# 先提前计算好所有行的总和,避免循环里重复计算浪费资源
row_sums = histCaps.sum(axis=1)

for row in histCaps.itertuples():
    idx = row.Index
    for col in histCaps.columns:
        # 用at[]访问元素比loc[]更高效,适合单个元素赋值
        weights.at[idx, col] = getattr(row, col) / row_sums[idx]

但还是要再强调:能不用循环就不用循环,向量化操作永远是Pandas处理数据的最优选择!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:54:06