介绍 1。pandarallel (pip安装)
2。joblib (pip安装)
怎么在熊猫应用中对并行进行处理?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
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怎么在熊猫应用中对并行进行处理