一个简单的替换平行化熊猫的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将值插入sql表的选定列。使用c等参数#   IF语句的java JList数据添加   java在这种情况下有没有更好的方法来调整哈希值?   java@Valid不会触发@Repository中的验证   java如何在安卓中调整位图的大小   iTextJava。lang.NoClassDefFoundError:com/itextpdf/text/DocumentException   java使用ResourceBundleMessageSource加载一个ressource包(message.properties)的全部内容   java如何通过JasperReports 6动态设置Excel工作表名称。十、   java是编写这个程序的最佳方式   JAVA伊奥。FileNotFoundException:C:\Program Files\Apache软件基金会\Tomcat 8.0\。。\webapps\ROOT\\u cips\config。伊尼   java我正在尝试创建一个TictaToe程序,但是JOptionPane和绘图有问题   垃圾收集为什么java中的finalize()方法不在Finalizer类中?为什么它是在对象类中定义的?   java如何用括号编码替换url中的括号?   java web集成移动应用程序   在netbeans中运行MIDP2应用程序时出现java错误