pandas - 让 Pandas DataFrame apply() 使用所有核心?

标签 pandas dask

截至 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/

相关文章:

python - XML 到 Pandas 数据框

python - Dask中延迟函数和正常函数的区别

python - dask.delayed 如何处理可变输入?

docker - Docker swarm节点无法检测到swarm中另一主机的服务

python - 如何在 Dask 中进行 sort_index、groupby 和应用函数?

python - 添加最近 10 个日期的指示器

python - 使用 numpy 数组修改 pandas dataframe 值

python - 带有值的堆叠条形图

python - Dask Dataframe 将列表的列拆分为多列

python - 如何对 pandas 数据框中的一列字符串进行排序,在其中强制按列排序所依据的字母顺序?