【Python】Pandas groupby加速处理数据
在使用pandas的時候,經常會用到groupby這個函數來對數據進行分組統計,同時可以使用 apply函數很方便的對分組之后的數據進行處理。
def data_process(x):# processreturn ...result?=?df.groupby('user_id').apply(data_process)使用joblib進行加速
但是如果數據非常多的時候(比如幾千萬條數據),運行的效率是比較低的,因為這個時候只使用了一個CPU線程,所以當數據非常多的時候,處理起來會很慢。這個時候CPU其他的核是空閑的,所以考慮使用joblib來多線程加速。
from joblib import Parallel, delayeddef data_process(x):# processreturn ...def applyParallel(dfGrouped, func):res = Parallel(n_jobs=4)(delayed(func)(group) for name, group in dfGrouped)return pd.concat(res)result?=?applyParallel(df.groupby('user_id'),?data_process)使用pandarallel進行加速
除了使用joblib之外,還可以使用pandarallel進行加速,使用pandarallel無需編寫函數,只需要提前初始化pandarallel即可。
需要說明的是,pandarallel目前只能在Linux和OS X上運行。使用內存文件系統(參數use_memory_fs控制)可以減少主進程與工作進程之間的數據傳輸時間,尤其是對于大數據而言。僅當目錄/dev/shm存在且用戶對其具有讀寫權限時,才認為內存文件系統可用。基本上,內存文件系統僅在某些Linux發行版(包括Ubuntu)上可用。
并行化具有成本(實例化新進程,通過共享內存發送數據等),因此,只有在要進行并行化的計算量足夠高的情況下,并行化才有效。對于很少的數據,使用并行化并不總是值得的。
參考:https://github.com/nalepae/pandaralle
本站qq群554839127,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【Python】Pandas groupby加速处理数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的webpack配置文件
- 下一篇: win10死机频繁怎么解决