首頁/ 家居/ 正文

Pandas中Apply函式加速百倍的技巧

[ 引言 ]

雖然目前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+

小夥伴一起學習!

相關文章

頂部