前言: 在進行數據處理的時候,我們經常會用到 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