大数据集下替代逐行条件循环的快速条件列生成方法
大体积数据集多条件新增列的高效实现方案
逐行遍历处理Pandas表格数据速度慢是必然的——这类写法完全没用到框架底层的向量化运算优化,所有判断都在Python解释器层逐行调度执行,300多万行的数据会产生巨量额外开销。直接用底层支持广播的向量化操作就行,性能比逐行循环高几百到上千倍。
首选方案:原生向量化布尔判断
这是目前性能最高的实现方式,所有运算在底层连续内存的数组结构上完成,没有Python层的循环开销。注意多条件并列时每个独立判断需要用括号包裹,同时满足的逻辑用&运算符连接:# 直接生成布尔值序列赋值给新列c4 df['c4'] = (df['c1'] == 'a') & (df['c2'] == 'x') & (df['c3'] == 'v1')针对你提到的(3374301, 25)规模的数据集,这个操作通常仅需几十到百余毫秒即可完成,处理结果和逐行判断完全一致:对你给出的示例数据来说,只有索引为0的行会被判定为True,其余行均为False。
可选简洁写法:eval表达式
如果后续判断条件增多、列名较长,用eval写判断逻辑可读性更强,性能和原生向量化方案基本持平:df['c4'] = df.eval("c1 == 'a' and c2 == 'x' and c3 == 'v1'")
避坑提示:不要使用
df.apply(lambda x: 逻辑判断, axis=1)的写法,这种方式本质还是逐行调用Python函数执行判断,和手写for循环的性能没有本质差异,处理百万行以上数据时速度依然很慢。
内容的提问来源于stack exchange,提问作者Akhil Sharma
相关产品推荐
相关产品推荐

