<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
雖然目前dask,cudf等包的出現,使得我們的資料處理大大得到了加速,但是並不是每個人都有比較好的gpu,非常多的朋友仍然還在使用pandas工具包,但有時候真的很無奈,pandas的許多問題我們都需要使用apply函數來進行處理,而apply函數是非常慢的,本文我們就介紹如何加速apply函數600倍的技巧。
我們以Apply為例,原始的Apply函數處理下面這個問題,需要18.4s的時間。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0, 11, size=(1000000, 5)), columns=('a','b','c','d','e')) def func(a,b,c,d,e): if e == 10: return c*d elif (e < 10) and (e>=5): return c+d elif e < 5: return a+b %%time df['new'] = df.apply(lambda x: func(x['a'], x['b'], x['c'], x['d'], x['e']), axis=1)
CPU times: user 17.9 s, sys: 301 ms, total: 18.2 s
Wall time: 18.4 s
因為處理是並行的,所以我們可以使用Swift進行加速,在使用Swift之後,相同的操作在我的機器上可以提升到7.67s。
%%time # !pip install swifter import swifter df['new'] = df.swifter.apply(lambda x : func(x['a'],x['b'],x['c'],x['d'],x['e']),axis=1) HBox(children=(HTML(value='Dask Apply'), FloatProgress(value=0.0, max=16.0), HTML(value='')))
CPU times: user 329 ms, sys: 240 ms, total: 569 ms
Wall time: 7.67 s
使用Pandas和Numpy的最快方法是將函數向量化。如果我們的操作是可以直接向量化的話,那麼我們就儘可能的避免使用:
for迴圈;
列表處理;
apply等操作
在將上面的問題轉化為下面的處理之後,我們的時間縮短為:421 ms。
%%time df['new'] = df['c'] * df['d'] #default case e = =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']
CPU times: user 134 ms, sys: 149 ms, total: 283 ms
Wall time: 421 ms
我們先將上面的類別轉化為int16型,再進行相同的向量化操作,發現時間縮短為:116 ms。
for col in ('a','b','c','d'): df[col] = df[col].astype(np.int16) %%time df['new'] = df['c'] * df['d'] #default case e = =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']
CPU times: user 71.3 ms, sys: 42.5 ms, total: 114 ms
Wall time: 116 ms
在能轉化為.values的地方儘可能轉化為.values,再進行操作。
此處先轉化為.values等價於轉化為numpy,這樣我們的向量化操作會更加快捷。
於是,上面的操作時間又被縮短為:74.9ms。
%%time df['new'] = df['c'].values * df['d'].values #default case e = =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']
CPU times: user 64.5 ms, sys: 12.5 ms, total: 77 ms
Wall time: 74.9 ms
通過上面的一些小的技巧,我們將簡單的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
到此這篇關於Pandas中Apply函數加速百倍的技巧分享的文章就介紹到這了,更多相關Pandas Apply函數加速內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45