怎么在熊猫应用中对并行进行处理

  介绍

怎么在熊猫应用中对并行进行处理?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1。pandarallel (pip安装)

对于一个带有熊猫DataFrame df的简单用例和一个应用函数的函数,只需用parallel_apply替换经典的适用。

得到pandarallel  import  pandarallel   ,   #,初始化   pandarallel.initialize ()   ,   #,Standard  pandas 适用   df.apply(函数)   ,   #,Parallel 应用   df.parallel_apply(函数)

注意,如果不想并行化计算,仍然可以使用经典的应用方法。

另外可以通过在初始化函数中传递progress_bar=True来显示每个工作CPU的一个进度条。

2。joblib (pip安装)

, https://pypi.python.org/pypi/joblib

#, Embarrassingly  parallel 辅助:,用make  it  easy 用write  readable  parallel  code 以及debug  it 很快   ,   得到math  import √   得到joblib  import 平行,延迟   ,   def 测试():   时间=start 才能;time.time ()   result1 才能=,平行(n_jobs=1)(延迟(√)(我* * 2),for 小姐:拷贝范围(10000))   最终获得才能=,time.time ()   打印(end-start)才能   时间=result2 才能;平行(n_jobs=8)(延迟(√)(我* * 2),for 小姐:拷贝范围(10000))   时间=end2 才能;time.time ()   打印才能(end2-end)

- - - - - - -输出结果- - - - - - - - - - -

0.4434356689453125 0.6346755027770996

3。多处理

import  multiprocessing  as  mp   ,   with  mp.Pool (mp.cpu_count ()), as 池:   df才能[& # 39;newcol& # 39;],=, pool.map (f, df(& # 39;坳# 39;])   multiprocessing.cpu_count ()

返回系统的CPU数量。

该数量不同于当前进程可以使用的CPU数量。可用的CPU数量可以由len (os.sched_getaffinity(0))方法获得。

可能引发NotImplementedError。

参见os.cpu_count ()

4。几种方法性能比较

(1)代码

import 系统   import 时间   import  pandas  as  pd   import  multiprocessing  as 议员   得到joblib  import 平行,延迟   得到pandarallel  import  pandarallel   得到tqdm  import  tqdm tqdm_notebook   ,   ,   def  get_url_len (url):   时间=url_list 才能;url.split (“!”)   time . sleep才能(0.01),#,休眠0.01秒   return 才能len (url_list)   ,   def  test1(数据):   “才能”;“   ,,不进行任何优化   “才能”;“   时间=start 才能;time.time ()   数据才能[& # 39;len # 39;],=,数据(& # 39;url # 39;]苹果(get_url_len)   最终获得才能=,time.time ()   cost_time =,才能最终获得成功,开始   时间=res 才能;和(数据(& # 39;len # 39;])   打印才能(“res: {},, cost 时间:{}“.format (res, cost_time))   ,   def  test_mp(数据):   “才能”;“   采才能用议员优化   “才能”;“   时间=start 才能;time.time ()   with 才能;mp.Pool (mp.cpu_count ()), as 池:   ,,,数据(& # 39;len # 39;],=, pool.map (get_url_len,数据(& # 39;url # 39;])   最终获得才能=,time.time ()   cost_time =,才能最终获得成功,开始   时间=res 才能;和(数据(& # 39;len # 39;])   打印才能(“test_mp  \ t  res: {},, cost 时间:{}“.format (res, cost_time))   ,   def  test_pandarallel(数据):   “才能”;“   采才能用pandarallel优化   “才能”;“   时间=start 才能;time.time ()   pandarallel.initialize才能()   数据才能[& # 39;len # 39;],=,数据(& # 39;url # 39;] .parallel_apply (get_url_len)   最终获得才能=,time.time ()   cost_time =,才能最终获得成功,开始   时间=res 才能;和(数据(& # 39;len # 39;])   打印才能(“test_pandarallel  \ t  res: {},, cost 时间:{}“.format (res, cost_time))   ,   ,   def  test_delayed(数据):   “才能”;“   采才能用延迟优化   “才能”;“   def 才能key_func(子集):   ,,,(“len")子集,=,子集(“url")苹果(get_url_len)   ,,,return 子集   ,   时间=start 才能;time.time ()   时间=data_grouped 才能;data.groupby (data.index)   #,才能data_grouped 是一个可迭代的对象,那么就可以使用,tqdm 来可视化进度条   时间=results 才能;平行(n_jobs=8)(延迟(key_func)(集团),for 名字,,group 拷贝tqdm (data_grouped))   时间=data 才能;pd.concat(结果)   最终获得才能=,time.time ()   cost_time =,才能最终获得成功,开始   时间=res 才能;和(数据(& # 39;len # 39;])   打印才能(“test_delayed  \ t  res: {},, cost 时间:{}“.format (res, cost_time))   ,   ,   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在熊猫应用中对并行进行处理