概述:pandas是一种非常常用的数据分析工具,但是pandas本身并没有任何多线程,因此对于数据量比较大的数据很难进行高效的数据处理,因此本文提供了一种使用joblib库使pandas计算多进程计算的方式,使其可以高效的进行数据处理。
joblib工具 joblib是一种Python高效计算的工具。主要用于Python多进程并行计算、高效对象持久化。
1.多进程高效计算 joblib最常用的功能就是
1 2 3 4 >>> from joblib import Parallel, delayed>>> from math import sqrt>>> Parallel(n_jobs=1 )(delayed(sqrt)(i**2 ) for i in range(10 ))[0.0 , 1.0 , 2.0 , 3.0 , 4.0 , 5.0 , 6.0 , 7.0 , 8.0 , 9.0 ]
2.高效的对象持久化 joblib的另外一个常用功能就是用来替代pickle对对象的持久化与读取,使对象持久化以及持久化对象读取过程更加高效,使用方式与pickle保持一致。
1 2 joblib.dump() joblib.load()
使用joblib对pandas进行多进程计算 1 2 3 4 5 6 7 8 9 10 11 12 13 14 from joblib import Parallel,delayeddef tmp_func (df1) : tqdm.pandas(ncols=50 ) df1["dns_record_nums" ] = df1.progress_apply(lambda x:get_DNS_Record_Nums(x.domain),axis=1 ) return df1 def apply_parallel (df_grouped,func) : results = Parallel(n_jobs=30 )(delayed(func)(group) for name,group in df_grouped) return pd.concat(results) df_grouped = df1.groupby(df1.index) %time df1 = apply_parallel(df_grouped,tmp_func)
参考文献