[ 引言 ]
雖然目前dask,cudf等包的出現,使得我們的資料處理大大得到了加速,但是並不是每個人都有比較好的gpu,非常多的朋友仍然還在使用pandas工具包,但有時候真的很無奈,pandas的許多問題我們都需要使用apply函式來進行處理,而apply函式是非常慢的,本文我們就介紹如何加速apply函式600倍的技巧。
實驗對比
01 Apply(Baseline)
我們以Apply為例,原始的Apply函式處理下面這個問題,需要
18.4s
的時間。
02
Swift加速
因為處理是並行的,所以我們可以使用Swift進行加速,在使用Swift之後,相同的操作在我的機器上可以提升到7。67s。
03
向量化
使用Pandas和Numpy的最快方法是將函式向量化。如果我們的操作是可以直接向量化的話,那麼我們就儘可能的避免使用:
for迴圈;
列表處理;
apply等操作
在將上面的問題轉化為下面的處理之後,我們的時間縮短為:421 ms。
04 類別轉化+向量化
我們先將上面的類別轉化為int16型,再進行相同的向量化操作,發現時間縮短為:116 ms。
05 轉化為values處理
在能轉化為。values的地方儘可能轉化為。values,再進行操作。
此處先轉化為。values等價於轉化為numpy,這樣我們的向量化操作會更加快捷。
於是,上面的操作時間又被縮短為: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
參考文獻:Do You Use Apply in Pandas? There is a 600x Faster Way
加入知識星球
【我們談論資料科學】
400+
小夥伴一起學習!