pandas apply应用并行进程,多核加快数据清洗速度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TH_NUM/article/details/89519832

在2019届腾讯广告算法大赛中对1亿级别的数据,使用了多进程加速数清洗。

会用到 pandas 。但是 pandas 本身好像并没有提供多进程的机制。本文将介绍如何来自己实现 pandas (apply 函数)的多进程执行。其中,我们主要借助 joblib 库,这个库为python 提供了一个非常简洁方便的多进程实现方法。

原来单进程代码:

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)

使用类似上面的代码,但是实际运行的代码不是上面的:加速
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/TH_NUM/article/details/89519832