↓推薦關(guān)注↓
[ 引言 ] 雖然目前dask,cudf等包的出現(xiàn),使得我們的數(shù)據(jù)處理大大得到了加速,但是并不是每個人都有比較好的gpu,非常多的朋友仍然還在使用pandas工具包,但有時候真的很無奈,pandas的許多問題我們都需要使用apply函數(shù)來進(jìn)行處理,而apply函數(shù)是非常慢的,本文我們就介紹如何加速apply函數(shù)600倍的技巧。
實(shí)驗(yàn)對比01Apply(Baseline) 我們以Apply為例,原始的Apply函數(shù)處理下面這個問題,需要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(e10)?and?(e>=5):
returnc+d
elife5:
????????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加速 因?yàn)樘幚硎遣⑿械模晕覀兛梢允褂肧wift進(jìn)行加速,在使用Swift之后,相同的操作在我的機(jī)器上可以提升到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的最快方法是將函數(shù)向量化。如果我們的操作是可以直接向量化的話,那么我們就盡可能的避免使用:
- for循環(huán);
- 列表處理;
- 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類別轉(zhuǎn)化+向量化 我們先將上面的類別轉(zhuǎn)化為int16型,再進(jìn)行相同的向量化操作,發(fā)現(xiàn)時間縮短為: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轉(zhuǎn)化為values處理 在能轉(zhuǎn)化為.values的地方盡可能轉(zhuǎn)化為.values,再進(jìn)行操作。
- 此處先轉(zhuǎn)化為.values等價于轉(zhuǎn)化為numpy,這樣我們的向量化操作會更加快捷。
%%time
df['new']=df['c'].values*df['d'].values#defaultcasee==10
mask=df['e'].values10
df.loc[mask,'new']=df['c']+df['d']
mask=df['e'].values5
df.loc[mask,'new']=df['a']+df['b']
CPUtimes:user64.5ms,sys:12.5ms,total:77ms
Walltime:74.9ms
實(shí)驗(yàn)匯總 通過上面的一些小的技巧,我們將簡單的Apply函數(shù)加速了幾百倍,具體的:
- 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
審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
SWIFT
+關(guān)注
關(guān)注
0文章
125瀏覽量
24864 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4422瀏覽量
67869 -
向量
+關(guān)注
關(guān)注
0文章
55瀏覽量
12068
原文標(biāo)題:Pandas 中 Apply 函數(shù)加速百倍的技巧
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
探索TRACO POWER TXH 600系列600瓦AC/DC電源的卓越性能
探索TRACO POWER TXH 600系列600瓦AC/DC電源的卓越性能 在電子設(shè)備的設(shè)計(jì)中,電源供應(yīng)是至關(guān)重要的一環(huán)。今天,我們將深入探討TRACO POWER的TXH 600系列60
HMC600LP4 / 600LP4E:75 dB 對數(shù)檢測器/控制器的卓越性能與應(yīng)用
HMC600LP4 / 600LP4E:75 dB 對數(shù)檢測器/控制器的卓越性能與應(yīng)用 在電子工程領(lǐng)域,功率檢測器是實(shí)現(xiàn)精準(zhǔn)信號處理和控制的關(guān)鍵組件。HMC600LP4 / 600LP
TDK-Lambda GXE600系列600W可編程電源:醫(yī)療與工業(yè)應(yīng)用的理想之選
TDK-Lambda GXE600系列600W可編程電源:醫(yī)療與工業(yè)應(yīng)用的理想之選 在電子工程師的日常工作中,電源的選擇至關(guān)重要,它直接影響著設(shè)備的性能、穩(wěn)定性和可靠性。今天,我們就來詳細(xì)了解一下
TDK-Lambda CUS600M和CUS600M1系列電源模塊深度解析
TDK-Lambda CUS600M和CUS600M1系列電源模塊深度解析 在電子工程師的日常工作中,電源模塊的選擇至關(guān)重要,它直接影響著整個系統(tǒng)的性能和穩(wěn)定性。今天,我們就來深入探討一下TDK
RF600E與RF600D:編碼器與解碼器芯片組的卓越之選
RF600E與RF600D:編碼器與解碼器芯片組的卓越之選 在電子設(shè)備的世界里,遠(yuǎn)程控制和數(shù)據(jù)傳輸是不可或缺的功能。而RF600E和RF600D這對編碼器與解碼器芯片組,為我們提供了一
600W單組輸出開關(guān)電源SE - 600系列:性能與設(shè)計(jì)解析
600W單組輸出開關(guān)電源SE - 600系列:性能與設(shè)計(jì)解析 在電子設(shè)備的電源供應(yīng)領(lǐng)域,一款性能優(yōu)良的開關(guān)電源至關(guān)重要。今天我們就來詳細(xì)解析SE - 600系列600W單組輸出開關(guān)電源
PSP-600系列600W電源:帶PFC和并聯(lián)功能的高性能解決方案
PSP-600系列600W電源:帶PFC和并聯(lián)功能的高性能解決方案 在電子工程師的日常設(shè)計(jì)工作中,電源模塊的選擇至關(guān)重要,它直接影響著整個系統(tǒng)的性能和穩(wěn)定性。今天,我們就來詳細(xì)探討一下PSP-600
600W單輸出醫(yī)療型電源MSP - 600系列技術(shù)解析
600W單輸出醫(yī)療型電源MSP - 600系列技術(shù)解析 在醫(yī)療電子設(shè)備的設(shè)計(jì)中,電源的穩(wěn)定性、安全性和高效性至關(guān)重要。MSP - 600系列600W單輸出醫(yī)療型電源,以其出色的性能和豐
HRPG - 600系列600W單輸出帶PFC功能電源模塊解析
HRPG - 600系列600W單輸出帶PFC功能電源模塊解析 一、引言 在電子設(shè)備的設(shè)計(jì)中,電源模塊的性能直接影響著整個系統(tǒng)的穩(wěn)定性和效率。HRPG - 600系列600W單輸出帶P
600W工業(yè)電源:設(shè)計(jì)與應(yīng)用詳解
600W工業(yè)電源:設(shè)計(jì)與應(yīng)用詳解 在工業(yè)電子領(lǐng)域,電源的穩(wěn)定性和性能至關(guān)重要。今天要介紹的這款600W工業(yè)電源,具備諸多出色的特性,能滿足多種工業(yè)應(yīng)用場景的需求。 文件下載
探秘PQC600系列600W 3" x 5" AC - DC開放式框架電源轉(zhuǎn)換器
探秘PQC600系列600W 3 x 5 AC - DC開放式框架電源轉(zhuǎn)換器 在電子設(shè)備的設(shè)計(jì)中,電源供應(yīng)器就像是設(shè)備的“心臟”,為整個系統(tǒng)提供穩(wěn)定、可靠的電力。今天,我們就來深入了解一下
常用硬件加速的方法
之前總結(jié)了一些常用硬件加速方法
1)面積換速度:也就是串轉(zhuǎn)并運(yùn)算,可以多個模塊同時計(jì)算;
2)時間換空間:時序收斂下通過頻率提高性能,雖然面積可能稍微加大點(diǎn);
3)流水線操作:流水線以面積換性能,以
發(fā)表于 10-29 06:20
RSA加速實(shí)現(xiàn)思路
。
②使用同步FIFO存取模乘結(jié)果S,無需外部讀寫地址線實(shí)現(xiàn)字段更新與讀取操作同時進(jìn)行。
③使用雙DFF結(jié)構(gòu)實(shí)現(xiàn)各字段右移一位,當(dāng)前字段最高位補(bǔ)下一個字段的最低位。
圖2 RSA算法加速結(jié)果
最后給出RSA算法的加速結(jié)果,如圖2所示,時鐘周期數(shù)
發(fā)表于 10-28 07:28
詳解hal_entry入口函數(shù)
當(dāng)使用RTOS時,程序從main函數(shù)開始進(jìn)行線程調(diào)度;當(dāng)沒有使用RTOS時,C語言程序的入口函數(shù)main函數(shù)調(diào)用了hal_entry函數(shù)。由于我們新建的工程是沒有選用RTOS的,因此,
如何加速apply函數(shù)600倍的技巧
評論