↓推荐关注↓
[ 引言 ] 虽然目前dask,cudf等包的出现,使得我们的数据处理大大得到了加速,但是并不是每个人都有比较好的gpu,非常多的朋友仍然还在使用pandas工具包,但有时候真的很无奈,pandas的许多问题我们都需要使用apply函数来进行处理,而apply函数是非常慢的,本文我们就介绍如何加速apply函数600倍的技巧。
实验对比01Apply(Baseline) 我们以Apply为例,原始的Apply函数处理下面这个问题,需要18.4s的时间。
importpandasaspd
importnumpyasnp
df=pd.DataFrame(np.random.randint(0,11,size=(1000000,5)),columns=('a','b','c','d','e'))
deffunc(a,b,c,d,e):
ife==10:
returnc*d
elif(e< 10) and (e>=5):
returnc+d
elife< 5:
returna+b
%%time
df['new']=df.apply(lambdax:func(x['a'],x['b'],x['c'],x['d'],x['e']),axis=1)
CPUtimes:user17.9s,sys:301ms,total:18.2s
Walltime:18.4s
02Swift加速 因为处理是并行的,所以我们可以使用Swift进行加速,在使用Swift之后,相同的操作在我的机器上可以提升到7.67s。
%%time
#!pipinstallswifter
importswifter
df['new']=df.swifter.apply(lambdax:func(x['a'],x['b'],x['c'],x['d'],x['e']),axis=1)
HBox(children=(HTML(value='DaskApply'),FloatProgress(value=0.0,max=16.0),HTML(value='')))
CPUtimes:user329ms,sys:240ms,total:569ms
Walltime:7.67s
03向量化 使用Pandas和Numpy的最快方法是将函数向量化。如果我们的操作是可以直接向量化的话,那么我们就尽可能的避免使用:
- for循环;
- 列表处理;
- apply等操作
%%time
df['new']=df['c']*df['d']#defaultcasee==10
mask=df['e']< 10
df.loc[mask,'new']=df['c']+df['d']
mask=df['e']< 5
df.loc[mask,'new']=df['a']+df['b']
CPUtimes:user134ms,sys:149ms,total:283ms
Walltime:421ms
04类别转化+向量化 我们先将上面的类别转化为int16型,再进行相同的向量化操作,发现时间缩短为:116 ms。
forcolin('a','b','c','d'):
df[col]=df[col].astype(np.int16)
%%time
df['new']=df['c']*df['d']#defaultcasee==10
mask=df['e']< 10
df.loc[mask,'new']=df['c']+df['d']
mask=df['e']< 5
df.loc[mask,'new']=df['a']+df['b']
CPUtimes:user71.3ms,sys:42.5ms,total:114ms
Walltime:116ms
05转化为values处理 在能转化为.values的地方尽可能转化为.values,再进行操作。
- 此处先转化为.values等价于转化为numpy,这样我们的向量化操作会更加快捷。
%%time
df['new']=df['c'].values*df['d'].values#defaultcasee==10
mask=df['e'].values< 10
df.loc[mask,'new']=df['c']+df['d']
mask=df['e'].values< 5
df.loc[mask,'new']=df['a']+df['b']
CPUtimes:user64.5ms,sys:12.5ms,total:77ms
Walltime:74.9ms
实验汇总 通过上面的一些小的技巧,我们将简单的Apply函数加速了几百倍,具体的:
- Apply: 18.4 s
- Apply + Swifter: 7.67 s
- Pandas vectorizatoin: 421 ms
- Pandas vectorization + data types: 116 ms
- Pandas vectorization + values + data types: 74.9ms
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
SWIFT
+关注
关注
0文章
125浏览量
24682 -
函数
+关注
关注
3文章
4406浏览量
66833 -
向量
+关注
关注
0文章
55浏览量
11979
原文标题:Pandas 中 Apply 函数加速百倍的技巧
文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
常用硬件加速的方法
之前总结了一些常用硬件加速方法
1)面积换速度:也就是串转并运算,可以多个模块同时计算;
2)时间换空间:时序收敛下通过频率提高性能,虽然面积可能稍微加大点;
3)流水线操作:流水线以面积换性能,以
发表于 10-29 06:20
详解hal_entry入口函数
当使用RTOS时,程序从main函数开始进行线程调度;当没有使用RTOS时,C语言程序的入口函数main函数调用了hal_entry函数。由于我们新建的工程是没有选用RTOS的,因此,
用DevEco Studio增量补丁修复功能,让鸿蒙应用的调试效率大增
DevEco Studio中得到了很好的解答,而增量补丁修复便是其中的核心特性之一。今天,我们要深入探讨鸿蒙应用增量补丁修复及其两个能够大幅加速开发进度的强大功能——Hot Reload和Apply
发表于 04-14 17:35
使用NVIDIA CUDA-X库加速科学和工程发展
NVIDIA GTC 全球 AI 大会上宣布,开发者现在可以通过 CUDA-X 与新一代超级芯片架构的协同,实现 CPU 和 GPU 资源间深度自动化整合与调度,相较于传统加速计算架构,该技术可使计算工程工具运行速度提升至原来的 11 倍,计算规模增加至 5
BK25-600D24H1N4 BK25-600D24H1N4
电子发烧友网为你提供AIPULNION(AIPULNION)BK25-600D24H1N4相关产品参数、数据手册,更有BK25-600D24H1N4的引脚图、接线图、封装手册、中文资料、英文资料,BK25-600D24H1N4真
发表于 03-24 18:41
BK25-600S24H1N4 BK25-600S24H1N4
电子发烧友网为你提供AIPULNION(AIPULNION)BK25-600S24H1N4相关产品参数、数据手册,更有BK25-600S24H1N4的引脚图、接线图、封装手册、中文资料、英文资料,BK25-600S24H1N4真
发表于 03-24 18:41
BK20-600D24H1N4 BK20-600D24H1N4
电子发烧友网为你提供AIPULNION(AIPULNION)BK20-600D24H1N4相关产品参数、数据手册,更有BK20-600D24H1N4的引脚图、接线图、封装手册、中文资料、英文资料,BK20-600D24H1N4真
发表于 03-24 18:40
BK20-600S24H1N4 BK20-600S24H1N4
电子发烧友网为你提供AIPULNION(AIPULNION)BK20-600S24H1N4相关产品参数、数据手册,更有BK20-600S24H1N4的引脚图、接线图、封装手册、中文资料、英文资料,BK20-600S24H1N4真
发表于 03-24 18:40
BK15-600S24H1N4 BK15-600S24H1N4
电子发烧友网为你提供AIPULNION(AIPULNION)BK15-600S24H1N4相关产品参数、数据手册,更有BK15-600S24H1N4的引脚图、接线图、封装手册、中文资料、英文资料,BK15-600S24H1N4真
发表于 03-20 18:54
BK5-600S24H1N4 BK5-600S24H1N4
电子发烧友网为你提供AIPULNION(AIPULNION)BK5-600S24H1N4相关产品参数、数据手册,更有BK5-600S24H1N4的引脚图、接线图、封装手册、中文资料、英文资料,BK5-600S24H1N4真值表,
发表于 03-20 18:35
FA120-600S48G1N4 FA120-600S48G1N4
电子发烧友网为你提供AIPULNION(AIPULNION)FA120-600S48G1N4相关产品参数、数据手册,更有FA120-600S48G1N4的引脚图、接线图、封装手册、中文资料、英文资料,FA120-600S48G1
发表于 03-19 18:32
AN207 GD32G5x3三角函数加速器TMU的使用说明
电子发烧友网站提供《AN207 GD32G5x3三角函数加速器TMU的使用说明.pdf》资料免费下载
发表于 01-21 17:30
•2次下载
西门子TIA Portal中函数FC和函数块FB的相互转换
描述 本文将介绍在西门子 TIA Portal 中使用 Add-In 插件实现函数 FC 和函数块 FB 的相互转换的方法和步骤。 第1步: 添加 PLC 设备。 选择西门子 CPU 1214C
使用LIS2DW12TR加速度传感器可以计算物体重力方向运动的距离吗
我先计算静止状态下的物体加速度,判断加速度大于静止的1.01倍时,开始计时间。通过实时加速度和初始加速度的差值更新速度,通过积分,计算每一段
发表于 12-12 16:21

如何加速apply函数600倍的技巧
评论