Pandas df.apply未达预期?它是否属于向量化操作?
问题分析与解答
核心结论
df.apply(axis=1)既不是向量化操作,也不会并行执行,它本质就是逐行调用你定义的Python函数,和iterrows的执行逻辑几乎一致,所以两者耗时接近完全正常。
具体原因
apply(axis=1)的执行逻辑
当你指定axis=1调用apply时,Pandas会逐行遍历DataFrame,把每一行转换成Series对象后传入你的f3函数。这个过程全程在Python层面循环,没有利用到Pandas/NumPy的C级向量化优化,也没有任何并行处理逻辑。
你代码里的t.sleep(0.05)直接验证了这一点:100行数据,每行等待0.05秒,总耗时就是100×0.05=5秒左右,和实际运行结果完全匹配,说明确实是逐行串行执行。你的需求对应的真正向量化写法
对于给c2列加1生成d3的简单需求,完全不需要用apply,直接用列级别的向量化运算即可:df['d3'] = df['c2'] + 1这种写法会把整个列的计算交给底层优化后的C代码执行,没有Python循环开销,哪怕是百万级数据也能瞬间完成。
额外建议
如果你的业务逻辑确实需要逐行处理(比如复杂的多列条件判断),apply(axis=1)和iterrows的效率都很低,此时可以考虑:
- 将数据转为NumPy数组后处理,利用NumPy的向量化能力
- 使用
swifter库,它会自动判断你的函数是否可以被向量化,从而选择最优执行方式 - 对于计算密集型逻辑,用
numba编译Python函数,实现接近C语言的执行效率
内容的提问来源于stack exchange,提问作者luki
相关产品推荐
相关产品推荐

