




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电铲初级工练习题(附参考答案)
- 2025员工拒绝签订劳动合同企业应对策略全解析
- 商业信息咨询和辅导服务协议规定事项
- 智能硬件产品设计与制造合同协议
- 知识产权转让合同协议书要求专业版
- 设备采购合同协议条款
- 经济师专业试题及答案
- 2025湖南省低空经济发展集团有限公司招聘12人(第二次)笔试参考题库附带答案详解
- 2025江西南昌市信阳鼎信产业投资集团有限公司及所属二级公司招聘24人笔试参考题库附带答案详解
- 2025广西旅发大健康产业集团有限公司招聘278人笔试参考题库附带答案详解
- RoHS2.0 HF与REACH法规培训教材
- 【大数据“杀熟”的法律规制探究17000字(论文)】
- 中小学学生规范汉字书写比赛硬笔格式
- 跳绳市场调研报告
- 《大学生的情绪》课件
- 铁道概论(第八版)佟立本主编
- 全国各省市名称大全
- 202305青少年软件编程(图形化)等级考试试卷四级(含答案)
- 光储充车棚技术方案设计方案
- 土壤重金属源调查分析投标方案
- 植筋锚固深度表
评论
0/150
提交评论