您好,登錄后才能下訂單哦!
小編給大家分享一下如何加快pandas計算速度,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
什么問題困擾我們?
使用pandas,當您運行以下行時:
# Standard apply
df.apply(func)
得到這個CPU使用率:
標準pandas適用 - 僅使用1個CPU
即使計算機有多個CPU,也只有一個完全專用于您的計算。
而不是下邊這種CPU使用,想要一個簡單的方法來得到這樣的東西:
并行Pandas適用 - 使用所有CPU
Pandaral·lel?如何幫助解決這個問題?
Pandaral·lel?的想法是將pandas計算分布在計算機上所有可用的CPU上,以顯著提高速度。
安裝:
$ pip install pandarallel [--user]
導入和初始化:
# Import
from pandarallel import pandarallel
# Initialization
pandarallel.initialize()
用法:
使用帶有pandas DataFrame的簡單用例df和要應用的函數func,只需替換經典apply的parallel_apply。
# Standard pandas apply
df.apply(func)
# Parallel apply
df.parallel_apply(func)
做完了!
請注意如果不想并行化計算,仍然可以使用經典apply方法。
也可以通過將顯示每個工作CPU一個進度條progress_bar=True的initialize功能。
并行應用進度條
并配有更復雜的情況下使用帶有pandas DataFrame df,該數據幀的兩列column1,column2和功能應用func:
# Standard pandas apply
df.groupby(column1).column2.rolling(4).apply(func)
# Parallel apply
df.groupby(column1).column2.rolling(4).parallel_apply(func)
基準
對于此處提供的四個示例,請執行以下配置:
https://github.com/nalepae/pandarallel/blob/master/docs/examples.ipynb
操作系統:Linux Ubuntu 16.04
硬件:Intel Core i7 @ 3.40 GHz - 4核
4核上的標準與并行(越低越好)
除了df.groupby.col_name.rolling.apply速度僅增加x3.2因子之外,平均速度增加約x4因子,即使用過的計算機上的核心數。
它是如何在引擎蓋下工作的?
調用parallel_apply時,Pandaral·lel:
實例化一個Pyarrow Plasma共享內存
https://arrow.apache.org/docs/python/plasma.html
為每個CPU創建一個子進程,然后要求每個CPU在DataFrame的子部分上工作
將所有結果合并到父進程中
以上是“如何加快pandas計算速度”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。