Python提高运行速度工具之Pandarallel的使用教程_第1页
Python提高运行速度工具之Pandarallel的使用教程_第2页
Python提高运行速度工具之Pandarallel的使用教程_第3页
Python提高运行速度工具之Pandarallel的使用教程_第4页
Python提高运行速度工具之Pandarallel的使用教程_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Python提高运行速度工具之Pandarallel的使用教程目录1.准备2.使用Pandarallel3.注意事项众所周知,由于GIL的存在,Python单进程中的所有操作都是在一个CPU核上进行的,所以为了提高运行速度,我们一般会采用多进程的方式。而多进程无非就是以下几种方案:

multiprocessingconcurrent.futures.ProcessPoolExecutor()joblibppservercelery

这些方案对于普通python玩家来说都不是特别友好,怎样才能算作一个友好的并行处理方案?

那就是原来的逻辑我基本不用变,仅修改需要计算的那行就能完成我们目标的方案,而pandarallel就是一个这样友好的工具。

可以看到,在pandarallel的世界里,你只需要替换原有的pandas处理语句就能实现多CPU并行计算。非常方便、非常nice.

在4核CPU的性能测试上,它比原始语句快了接近4倍。测试条件(OS:LinuxUbuntu16.04,Hardware:IntelCorei7@3.40GHz-4cores),这就是我所说的,它把CPU充分利用了起来。

下面就给大家介绍这个模块怎么用,其实非常简单,任何代码只需要加几行代码就能实现质的飞跃。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上

pipinstallpandarallel

2.使用Pandarallel

使用前,需要对Pandarallel进行初始化:

frompandarallelimportpandarallel

pandarallel.initialize()

这样才能调用并行计算的API,不过initialize中有一个重要参数需要说明,那就是nb_workers,它将指定并行计算的Worker数,如果没有设置,所有CPU的核都会用上。

Pandarallel一共支持8种Pandas操作,下面是一个apply方法的例子。

importpandasaspd

importtime

importmath

importnumpyasnp

frompandarallelimportpandarallel

#初始化

pandarallel.initialize()

df_size=int(5e6)

df=pd.DataFrame(dict(a=np.random.randint(1,8,df_size),

b=np.random.rand(df_size)))

deffunc(x):

returnmath.sin(x.a**2)+math.sin(x.b**2)

#正常处理

res=df.apply(func,axis=1)

#并行处理

res_parallel=df.parallel_apply(func,axis=1)

#查看结果是否相同

res.equals(res_parallel)

其他方法使用上也是类似的,在原始的函数名称前加上parallel_,比如DataFrame.groupby.apply:

importpandasaspd

importtime

importmath

importnumpyasnp

frompandarallelimportpandarallel

#初始化

pandarallel.initialize()

df_size=int(3e7)

df=pd.DataFrame(dict(a=np.random.randint(1,1000,df_size),

b=np.random.rand(df_size)))

deffunc(df):

dum=0

foritemindf.b:

dum+=math.log10(math.sqrt(math.exp(item**2)))

returndum/len(df.b)

#正常处理

res=df.groupby("a").apply(func)

#并行处理

res_parallel=df.groupby("a").parallel_apply(func)

res.equals(res_parallel)

又比如DataFrame.groupby.rolling.apply:

importpandasaspd

importtime

importmath

importnumpyasnp

frompandarallelimportpandarallel

#初始化

pandarallel.initialize()

df_size=int(1e6)

df=pd.DataFrame(dict(a=np.random.randint(1,300,df_size),

b=np.random.rand(df_size)))

deffunc(x):

returnx.iloc[0]+x.iloc[1]**2+x.iloc[2]**3+x.iloc[3]**4

#正常处理

res=df.groupby('a').b.rolling(4).apply(func,raw=False)

#并行处理

res_parallel=df.groupby('a').b.rolling(4).parallel_apply(func,raw=False)

res.equals(res_parallel)

案例都是类似的,这里就直接列出表格,不浪费大家宝贵的时间去阅读一些重复的例子了:

3.注意事项

1.我有8个CPU,但parallel_apply只能加快大约4倍的计算速度。为什么?

答:正如我前面所言,Python中每个进程占用一个核,Pandarallel最多只能加快到你所拥有的核心的总数,一个4核的超线程C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论