本文共 979 字,大约阅读时间需要 3 分钟。
在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,delayeddef 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 dfdef 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)
使用类似上面的代码,但是实际运行的代码不是上面的:加速
转载地址:http://kdwmi.baihongyu.com/