pandas apply應用並行進程,多核加快運行速度

前言: 在進行數據處理的時候,我們經常會用到 pandas 。但是 pandas 本身好像並沒有提供多進程的機制。本文將介紹如何來自己實現 pandas (apply 函數)的多進程執行。其中,我們主要藉助 joblib 庫,這個庫爲python 提供了一個非常簡潔方便的多進程實現方法。

注意:本文說的都是多進程而不是多線程。

功能需求:
爲了匹配兩個datafarme中相同的部分,並把【’是否購買‘】這個標籤賦給第一個dataframe。(注:pandas中的合併連接也可以實現)
原來單進程代碼:

df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')

def add_labels(filenam,df):
	list_name = list(df['name'])
	if filename in list_name:
		i = list_name.index(filename)
		return df['是否購買][i]
	else:
		return 'Nan'
		
df1['是否購買'] = df1['name'].apply(add_labels, args=(df2,))

修改爲多進程代碼:

from joblib import Parallel,delayed

def add_labels(filenam,df):
	list_name = list(df['name'])
	if filename in list_name:
		i = list_name.index(filename)
		return df['是否購買][i]
	else:
		return 'Nan'
		
def tmp_func(df1):
	df1['是否購買'] = df1['name'].apply(add_labels, args=(df2,))
	return df
def apply_parallel(df_grouped,func):
	results = Parallel(n_jobs=10)(delayed(func)(group) for name,group in df_grouped)
	return pd.concat(results)
	
df_grouped = df1.groupby(df1.index)
df1 = apply_parallel(df_grouped,tmp_func)

借鑑:https://blog.csdn.net/Jerr__y/article/details/71425298?utm_source=blogxgwz1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章