一个简单的替换平行化熊猫的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第三方库


热门话题
ws-consumer服务地址中的java动态属性   java如何比较整数列表,然后按升序排序?   javascript我正在使用java脚本调用一个函数,但它没有调用代码下面的方法,也没有调用secretitnames()函数   在文本窗格中多次使用Java insertIcon图标   JavaMSAL安卓。AuthenticationActivity完成,但用于身份验证请求的线程池线程仍处于等待状态   if语句中的java多范围比较   java toString()表示输出   java如何在jcstrest测试中生成指令重新排序   java我怎样才能运行它?   web应用程序中使用Hibernate和Spring的java问题   如何将字符串数据写入Java文本文件   如何在java命令提示符下运行已签名的jar文件?   java从我的菜单调用RCP应用程序   java如何等待Canvas/GraphicsContext完成任务,然后再继续执行代码块?