在使用pandas的时候,经常会用到groupby这个函数来对数据进行分组统计,同时可以使用 apply函数很方便的对分组之后的数据进行处理。

def data_process(x):# processreturn ...result = df.groupby('user_id').apply(data_process)

使用joblib进行加速

但是如果数据非常多的时候(比如几千万条数据),运行的效率是比较低的,因为这个时候只使用了一个CPU线程,所以当数据非常多的时候,处理起来会很慢。这个时候CPU其他的核是空闲的,所以考虑使用joblib来多线程加速。

from joblib import Parallel, delayeddef data_process(x):# processreturn ...def applyParallel(dfGrouped, func):res = Parallel(n_jobs=4)(delayed(func)(group) for name, group in dfGrouped)return pd.concat(res)result = applyParallel(df.groupby('user_id'), data_process)

使用pandarallel进行加速

除了使用joblib之外,还可以使用pandarallel进行加速,使用pandarallel无需编写函数,只需要提前初始化pandarallel即可。

from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True)
# 可选参数:
# nb_workers:用于并行化的工作程序数。数值类型,如果未设置,则将使用所有可用的CPU。
# progress_bar:如果设置为,则显示进度条True。(False默认为布尔)
# verbose:详细级别(2默认为int )
#          0-不显示任何日志
#          1-仅显示警告日志
#          2-显示所有日志
# use_memory_fs:(None默认为布尔)如果设置为None且内存文件系统可用,Pandarallel将使用它在主进程和工作进程之间传输数据。
# 如果内存文件系统不可用,则Pandarallel将默认进行多处理数据传输(管道)。如果设置为True,则Pandarallel将使用内存文件系统在主进程和工作进程之间传输数据,SystemError如果内存文件系统不可用,则会引发。
# 如果设置为False,则Pandarallel将使用多处理数据传输(管道)在主进程和工作进程之间传输数据。def data_process(x):# processreturn ...result = df.groupby('user_id').parallel_apply(data_process)

需要说明的是,pandarallel目前只能在Linux和OS X上运行。使用内存文件系统(参数use_memory_fs控制)可以减少主进程与工作进程之间的数据传输时间,尤其是对于大数据而言。仅当目录/dev/shm存在且用户对其具有读写权限时,才认为内存文件系统可用。基本上,内存文件系统仅在某些Linux发行版(包括Ubuntu)上可用。

并行化具有成本(实例化新进程,通过共享内存发送数据等),因此,只有在要进行并行化的计算量足够高的情况下,并行化才有效。对于很少的数据,使用并行化并不总是值得的。

参考:https://github.com/nalepae/pandaralle

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群554839127,加入微信群请扫码:

【Python】Pandas groupby加速处理数据相关推荐

  1. 【Python】GroupBy:数据聚合与分组运算

    [博客地址]:https://blog.csdn.net/sunyaowu315 [博客大纲地址]:https://blog.csdn.net/sunyaowu315/article/details/ ...

  2. Python+pandas实现时间序列数据扩展案例一则

    感谢山东科技大学李超老师提供应用背景. 在分析时序数据的有些场合下,可能每个月只能拿到一个数据,然而实际处理时,需要把这个数据扩展到该月的每天,且每天的数据相同. 演示代码: 某次运行结果: ---- ...

  3. python pandas 去重_Pandas 数据框增、删、改、查、去重、抽样基本操作方法

    怎么使用Python中Pandas库Resample,实现重采样,按照时间,比如原采样间隔为100ms,数据为[0,10,20,30,40],那么重采样#python中的pandas库主要有DataF ...

  4. Python Pandas导出Hbase数据到dataframe

    Python导出Hbase数据的思路: 使用happybase连接Hbase 使用table.scan()扫数据,将得到的数据整理为dataframe格式 将从Hbase中得到的byte类型的数据转为 ...

  5. Python+pandas分离Excel数据到同一个Excel文件中多个Worksheets

    封面图片:<Python程序设计(第2版)>,董付国,清华大学出版社 =============== 问题描述: 已知文件"超市营业额2.xlsx"中结构与部分数据如图 ...

  6. Python pandas导excel数据量太大报错问题

    开发环境 MySQL 10.1.38-MariaDB-1~bionic Python3.7.8 开发工具 PyCharm2018.1 SmartGit18.1 Navicat15.0.28 问题描述 ...

  7. Python:pandas groupby实现类似excel中averageifs函数的功能

    从exccel切换到python进行数据处理,处理的主要还是excel的思路,希望实现类似excel中某个函数的功能,日常主要参考蓝鲸的<从excel到python>. 目前在做一些统计指 ...

  8. python excel数据框_使用python pandas使用新数据框附加现有excel表

    用于将DataFrame附加到现有Excel文件的辅助函数: def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=No ...

  9. python pandas DataFrame 修改数据

    文章目录 修改行名 修改列名 修改行数据 修改列数据 修改单个数据 import pandas as pd df1 = pd.DataFrame({'日期': ['2021-7-2', '2021-8 ...

最新文章

  1. 适用于CUDA GPU的Numba 随机数生成
  2. 大学计算机英语句子,大学英语作文万能句子
  3. PHP7新特性 What will be in PHP 7/PHPNG
  4. Linux android studio :'tools.jar' seems to be not in Android Studio classpath.
  5. iOS: 属性声明strong和retain竟然不一样
  6. PHP中include和require的区别详解
  7. Windows 安全杂记(一)
  8. SQL server 2008 如何卸载干净
  9. MindManager 2020免费序列号激活下载及怎样运用思维导图进行头脑风暴教程
  10. matlab导入txt数据画图
  11. 10大开源的快速开发平台—架构师必看
  12. GTK开发(二)控件和布局
  13. 电影天堂python分页爬取
  14. Zoreto+坚果云+pdf expert(papership) 实现文献管理和批注同步
  15. Axure 9 收录不同效果的制作过程
  16. 18个最好的代码编辑器/IDE工具,希望你会喜欢。
  17. 重建系统的 WinRE
  18. java中policelisten的用法,中考英语简单句和主谓一致专项语法复习
  19. 小程序在同一个页面中,当改选radio选项的时候,显示出不同的内容,不触碰事件时都隐藏?
  20. 台灯是白炽灯好,是LED护眼灯好?推荐对眼睛舒适的护眼台灯

热门文章

  1. cxgrid动态创建列
  2. Integer.valueof(null)报错
  3. [swustoj 856] Huge Tree
  4. 设置tomcat 编译文件位置【转】
  5. Android中利用HttpClient建立一次持久的连接
  6. javascript-模板方法模式-提示框归一化插件
  7. Mac 10.11系统下cocoaPods安装注意事项
  8. 背包九讲之四(混合三种背包问题)
  9. Android UI(三)SlidingMenu实现滑动菜单(详细 官方)
  10. ESFramewor使用技巧(2)-- 在插件中使用NHibernate