如何替换代码中的Iterrows以提升Pandas程序运行效率?
Pandas向量化替代iterrows提升效率的方案
你的原代码逻辑是遍历每一行,当列a的浮点值等于key_1时,将第15列(iloc索引14)赋值为该行的key_2,否则赋值为该行的key_1。用向量化操作可以彻底抛弃低效的iterrows,下面是两种简洁高效的实现方式:
方法一:使用numpy.where(推荐)
np.where是典型的向量化条件赋值工具,一行代码就能完成逻辑:
import numpy as np # 先将列'a'统一转为float类型(避免循环里重复转换) df['a'] = df['a'].astype(float) # 获取目标列的列名(比直接用iloc更清晰) target_col = df.columns[14] # 条件赋值 df[target_col] = np.where(df['a'] == key_1, df['key_2'], df['key_1'])
方法二:使用Pandas的loc索引
先设置默认值,再批量更新满足条件的行,逻辑更直观:
df['a'] = df['a'].astype(float) target_col = df.columns[14] # 先给所有行设置默认值key_1 df[target_col] = df['key_1'] # 批量替换满足条件的行的值为key_2 df.loc[df['a'] == key_1, target_col] = df['key_2']
关键注意点
- 提前统一列
a的类型为float,避免重复转换带来的额外开销; - 尽量用列名而非
iloc索引操作,代码可读性更强,也避免因列顺序变化导致的错误; - 两种方法都是底层C级别的向量化操作,数据量越大,和
iterrows的效率差距越明显(通常能快几十到上百倍)。
内容的提问来源于stack exchange,提问作者STOWE
相关产品推荐
相关产品推荐

