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

Python中高效遍历海量数据:替代pandas iterrows的最优方法

针对Pandas海量数据遍历的高效替代方案

针对你需要根据sum列判断事件并生成事件列表的场景,以下是几种比iterrows高效得多的方案,按性能优先级排序:

1. 向量化操作(最优选择)

Pandas的核心优势就是向量化运算,直接对整列进行条件判断和数据提取,完全避免逐行循环,性能比iterrows高几个数量级。

假设你的条件是sum列大于阈值(比如100),需要提取对应time和event字段到事件列表:

# 生成条件掩码
mask = df['sum'] > 100
# 直接提取符合条件的行并转成列表
event_list = df[mask][['time', 'event']].values.tolist()

如果需要更复杂的条件判断,也可以用逻辑组合(比如(df['sum'] > 100) & (df['time'] < '2024-01-01'))来生成掩码。

2. NumPy数组操作(极致性能)

把DataFrame的列转成NumPy数组后,运算效率会进一步提升,适合超大规模数据集:

# 提取列对应的NumPy数组
sum_vals = df['sum'].values
times = df['time'].values
events = df['event'].values

# 生成条件掩码
mask = sum_vals > 100
# 按掩码提取数据并组合成事件列表
event_list = list(zip(times[mask], events[mask]))

3. itertuples迭代器(适合简单逐行逻辑)

itertuples是Pandas提供的轻量级迭代器,返回命名元组,不需要像iterrows那样把每行转成Series,速度比iterrows快2-10倍:

event_list = []
# index=False表示不返回行索引
for row in df.itertuples(index=False):
    if row.sum > 100:
        event_list.append((row.time, row.event))

4. apply方法(仅用于复杂逻辑)

如果你的事件判断逻辑非常复杂,无法用向量化实现,可以用apply,但注意它的性能不如前三种,仅作为备选:

def judge_event(row):
    # 这里可以写复杂的判断逻辑
    if row['sum'] > 100 and row['status'] == 'active':
        return (row['time'], row['event'])
    return None

# 过滤掉返回None的结果,生成事件列表
event_list = [item for item in df.apply(judge_event, axis=1) if item is not None]

性能优先级总结

向量化操作 > NumPy数组操作 > itertuples > apply > iterrows

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:05:17