一个简单的替换平行化熊猫的dropin'apply`

parappl的Python项目详细描述


副产

使用joblib对大型系列/数据帧上的并行化pandasapply()进行简单的插入式替换。通过将序列/数据帧分成多个块并同时运行apply来工作。作为经验法则,只有当您有1000万行及以上的行时才使用parapply(请参阅下面的基准测试)。在

通过运行pip install parapply进行安装。需要joblibnumpy、和{}(显然!)在

简单用法

系列:parapply(srs, fun)而不是srs.apply(fun) 数据帧:parapply(df, fun, axis)而不是df.apply(fun, axis)

对于更精细的控制: +n_jobs要确定并发作业的数量, +n_chunks用于分割序列/数据帧的块数

示例:

import pandas as pd
import numpy as np
from parapply import parapply

# Series example
np.random.seed(0)
srs = pd.Series(np.random.random(size=(5, )))
pd_apply_result = srs.apply(lambda x: x ** 2)
parapply_result = parapply(srs, lambda x: x ** 2)
print(pd_apply_result)

# 0    0.301196
# 1    0.511496
# 2    0.363324
# 3    0.296898
# 4    0.179483
# dtype: float64

print(parapply_result)

# 0    0.301196
# 1    0.511496
# 2    0.363324
# 3    0.296898
# 4    0.179483
# dtype: float64

# DataFrame example with axis = 1
np.random.seed(1)
df = pd.DataFrame(data={
    'a': np.random.random(size=(5, )),
    'b': np.random.random(size=(5, )),
    'c': np.random.random(size=(5, )),
})

pd_apply_result = df.apply(sum, axis=1)
parapply_result = parapply(df, sum, axis=1)
print(pd_apply_result)

# 0    0.928555
# 1    1.591804
# 2    0.550127
# 3    1.577217
# 4    0.712960
# dtype: float64

print(parapply_result)

# 0    0.928555
# 1    1.591804
# 2    0.550127
# 3    1.577217
# 4    0.712960
# dtype: float64

有关更多信息,请参阅doc字符串。在

快速和肮脏的基准

运行一个快速而肮脏的基准测试,比较在多个n_jobs设置下使用pandasapply和{}将{}应用到不同长度的序列所花费的时间:

Runtime vs log(num data points)

上面的半对数图显示,pandas apply和{}之间的显著运行时差异在1000万个数据点及以后出现。在

致谢

感谢@aaronlhe向我介绍了单元测试的世界!在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使图像以正确的速度在屏幕上移动,以适应所有显示   内存Java分配:从预先存在/分配的池中分配对象   java这种书写方式?   Java正则表达式查找字符串的开头   java是否可以创建一个类来处理安卓中的所有日志代码(例如log.d(TAG,message))   如何使用Selenium和java单击WebTable任意页面上的WebElement   java解析字符串中的文件名   java刷新JTree内容   java如何覆盖RequestMappingHandler   爪哇数石头、布、剪刀赢了多少   struts中的java无效令牌   swing JTree,优化算法,Java   java Tomcat和SSL:密钥库格式无效