Pandas Apply 与 NumPy Vectorize:哪个创建新列更快?

Linda Hamilton
发布: 2024-10-27 08:28:31
原创
362 人浏览过

  Pandas Apply vs. NumPy Vectorize: Which is Faster for Creating New Columns?

Pandas Apply 与 NumPy Vectorize 在列创建中的性能

简介

而 Pandas ' df.apply() 是一个用于在数据帧上操作的多功能函数,它的性能可能是一个问题,特别是对于大型数据集。 NumPy 的 np.vectorize() 提供了一种潜在的替代方案,用于根据现有列创建新列。本文研究了两种方法之间的速度差异,解释了为什么 np.vectorize() 通常更快。

性能比较

广泛的基准测试表明 np.vectorize( )始终明显优于 df.apply()。例如,在具有 100 万行的数据集中,np.vectorize() 在 2016 款 MacBook Pro 上速度提高了 25 倍。随着数据集大小的增加,这种差异变得更加明显。

底层机制

df.apply() 通过一系列 Python 级别的循环进行操作,这引入了重要的开销。每次迭代都涉及创建一个新的 Pandas Series 对象、调用该函数并将结果附加到新列。相比之下,np.vectorize() 利用 NumPy 的广播规则来评估数组上的函数。这种方法绕过了 Python 循环的开销,并利用了优化的 C 代码,从而加快了执行速度。

真正的向量化

对于真正的向量化计算,df.apply 都不是() 和 np.vectorize() 都不是最佳的。相反,本机 NumPy 操作提供了卓越的性能。例如,矢量化的 diverge() 比 df.apply() 或 np.vectorize() 显示出显着的性能优势。

使用 Numba 进行 JIT 编译

For为了获得更高的效率,可以使用 Numba 的 @njit 装饰器将 divide() 函数编译为高效的 C 级代码。这种方法进一步减少了执行时间,以微秒而不是秒为单位产生结果。

结论

虽然 df.apply() 提供了一个方便的接口来将函数应用于数据帧,对于大型数据集,其性能限制变得显而易见。对于性能关键型应用程序,NumPy 的 np.vectorize() 及其 Numba 中 JIT 编译的对应项为创建新列提供了卓越的速度。还值得注意的是,使用本机 NumPy 函数的真正向量化操作是大规模数据操作的最有效选择。

以上是Pandas Apply 与 NumPy Vectorize:哪个创建新列更快?的详细内容。更多信息请关注PHP中文网其他相关文章!

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