截至 2017 年 8 月,Pandas DataFame.apply()不幸的是,它仍然仅限于使用单核,这意味着当您运行 df.apply(myfunc, axis=1) 时,多核机器将浪费大部分计算时间。
如何使用所有核心在数据帧上并行运行应用?
最佳答案
您可以使用 swifter
封装:
pip install swifter
(请注意,您可能希望在 virtualenv 中使用它以避免与已安装的依赖项发生版本冲突。)
Swifter 作为 pandas 的插件,允许您重用 apply
函数:
import swifter
def some_function(data):
return data * 10
data['out'] = data['in'].swifter.apply(some_function)
它会自动找出并行化函数的最有效方法,无论函数是否矢量化(如上例所示)。
More examples和一个performance comparison可以在 GitHub 上找到。请注意,该软件包正在积极开发中,因此 API 可能会发生变化。
另请注意,此 will not work automatically对于字符串列。当使用字符串时,Swifter 将回退到“简单”的 Pandas apply
,这不会是并行的。在这种情况下,即使强制它使用 dask
也不会带来性能改进,您最好手动拆分数据集和 parallelizing using multiprocessing
.
关于pandas - 让 Pandas DataFrame apply() 使用所有核心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45545110/