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

备用:https://www.cnblogs.com/work115/p/5621789.html

你可能感兴趣的:(pandas,python)