为什么 np.vectorize() 比 df.apply() 对于 Pandas 列创建更快?

Susan Sarandon
发布: 2024-10-27 04:34:30
原创
846 人浏览过

  Why is np.vectorize() Faster than df.apply() for Pandas Column Creation?

Pandas apply 与 np.vectorize 的性能比较

据观察,np.vectorize() 可以比 df 快得多。基于 Pandas DataFrame 中的现有列创建新列时使用 apply() 。观察到的性能差异源于这两种方法所采用的底层机制。

df.apply() 与 Python 级循环

df.apply() 本质上创建一个 Python 级别的循环,迭代 DataFrame 的每一行。正如提供的基准测试中所演示的,与真正的向量化计算相比,Python 级循环(例如列表推导式和映射)都相对较慢。

np.vectorize() 与 df.apply()

np.vectorize() 将用户定义函数转换为通用函数 (ufunc)。 Ufunc 经过高度优化,可以利用基于 C 的代码和优化算法对 NumPy 数组执行逐元素运算。这与 df.apply() 形成对比,df.apply() 对 Pandas Series 对象进行操作并产生额外的开销。

真正的矢量化:最佳性能

真正高效的列创建,强烈建议在 NumPy 中进行矢量化计算。 numpy.where 等操作以及使用 df["A"] / df["B"] 进行直接逐元素除法的速度非常快,并且避免了与循环相关的开销。

Numba 优化

为了获得更高的效率,可以使用 Numba 进一步优化循环,Numba 是一种将 Python 函数转换为优化的 C 代码的编译器。 Numba 可以将执行时间缩短至微秒,显着优于 df.apply() 和 np.vectorize()。

结论

虽然 np.vectorize() 可能提供对 df.apply() 进行了一些改进,它并不是 NumPy 中矢量化计算的真正替代品。为了实现最大性能,请利用 Numba 优化或 NumPy 中的直接矢量化操作在 Pandas DataFrames 中创建新列。

以上是为什么 np.vectorize() 比 df.apply() 对于 Pandas 列创建更快?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!