网络编程
位置:首页>> 网络编程>> Python编程>> Pandas 多进程处理数据提高速度

Pandas 多进程处理数据提高速度

作者:Python学习与数据挖掘  发布时间:2021-12-11 17:30:51 

标签:Pandas,多进程,处理,数据,提高,速度

前言:

python 有自己的多进包 multiprocessing 去实现并行计算,但在Pandas处理数据中,使用 multiprocessing 并不好使,只听见风扇转啊转,就不见运行完毕。

为了提高一点数据清洗的速度,找到一个Pandas多进程的方法,pandarallel 库,做了一下测试。下面来看看具体过程吧

【注】文末提供技术交流方式

小数据集(先试过了1w)可能多进程还没单进程快,因为进程开启关闭也要一点时间。于是我弄了 100w 数据来测试:

Pandas 多进程处理数据提高速度

利用以上数据做以下处理:

  • 剔除 titile,comment 两列文本中的表情符号

  • title,comment 两列做一个分词处理,覆盖原来的列

1、单进程

在交互式环境中输入如下命令:

'''单进程'''
import jieba
import re
import time
import pandas as pd

def filter_emoji(desstr, restr=''):
    if (desstr is None) or str(desstr) == 'nan':
        return ''
    # 过滤表情
    try:
        co = re.compile(u'[\U00010000-\U0010ffff]')
    except:
        co = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
    return co.sub(restr, desstr)

if __name__ == '__main__':
    start = time.time()
    data = pd.read_csv('feike.csv',encoding='gbk')
    data['comment'] = data['comment'].map(filter_emoji)
    data['title'] = data['title'].map(filter_emoji)
    data['comment'] = data['comment'].map(lambda s: jieba.lcut(s))
    data['title'] = data['title'].map(lambda s: jieba.lcut(s))
    end = time.time()
    print(end - start)

输出:

Pandas 多进程处理数据提高速度

在单进程的情况下,可以看到用时 294s,接近 5min 了。

2、多进程

multiprocessing多进程写法,这种写法网上一搜一大把,代码没有错,多进程任务可以执行。

例如run_task 函数中的任务是爬虫代码时,没有什么问题,但如果是数据清洗的代码,我测试就很久都跑不出来:

Pandas 多进程处理数据提高速度

接下来换成Pandas多进程 pandarallel 的写法就可以:

'''pandarallel 多进程'''
import jieba
import re
import time
import pandas as pd
from pandarallel import pandarallel
pandarallel.initialize(nb_workers=4)

def filter_emoji(desstr, restr=''):
    if (desstr is None) or str(desstr) == 'nan':
        return ''
    # 过滤表情
    try:
        co = re.compile(u'[\U00010000-\U0010ffff]')
    except:
        co = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
    return co.sub(restr, desstr)

if __name__ == '__main__':
    start = time.time()
    data = data = pd.read_csv('feike.csv',encoding='gbk') 
    data['comment'] = data['comment'].parallel_apply(filter_emoji)
    data['title'] = data['title'].parallel_apply(filter_emoji)
    data['comment'] = data['comment'].parallel_apply(lambda s: jieba.lcut(s))
    data['title'] = data['title'].parallel_apply(lambda s: jieba.lcut(s))
    end = time.time()
    print(end - start)

输出:

Pandas 多进程处理数据提高速度

可以看到改写后时间用时 154s(2min30s),比单进程快了一倍。关于 pandarallel 可以查看文档

对应的多进程写法函数对照表,Pandas中的 apply,applymap,map 三个函数的区别,写对应的代码:

Pandas 多进程处理数据提高速度

来源:https://blog.csdn.net/weixin_38037405/article/details/123979210

0
投稿

猜你喜欢

  • 1. 前言邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本、富文
  • 前言网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或
  • 【OpenCV】⚠️高手勿入! 半小时学会基本操作 ⚠️ 图像轮廓概述OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大.
  • 问题:项目中有一个需求,一个tabBar下面如果没有内容就不让该tabBar显示,当然至于有没有内容,需要我们通过请求的来判断,但是由于请求
  • 最近有点审美疲劳,以往看起来觉得漂亮的界面现在觉得很一般,以前觉得看来还行的界面现在觉得很丑了。想来是时候休息一下了。唯美觉得上次做的OA登
  • Case:需要给一个现有的shp数据创建一个字段,并将属性表中原有的一个文本类型的属性转换为整型后填入新创建的字段。Problem:新字段创
  • 数据库(DataBase,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。通俗地说,数据库就是一个按照数据结构来组
  • XML Web Service 是在 Internet 上进行分布式计算的基本构造块。开放的标准以及对用户和应用程序之间的通信和协作的关注产
  • 目录1.按照一列数值进行排序1.1按照五缺失值的一列进行排序1.1.1升序排列1.1.2 降序排列1.2按照有缺失值的一列进行排序1.2.1
  • 功能点显示日期时间显示树莓派当前局域网IP显示当前UP主粉丝数显示B站未读消息显示B站视频总计播放数显示视频总计获赞数显示总计获得充电次数显
  • 一、进入pycharm二、步骤1、开始点击pycharm左上角的file,找到python interpreter,点击右边的设置(长得像齿
  • Tqdm库比较常用,用于显示进度条。简单用法:from tqdm import tqdmfor i in tqdm(range(2)):
  • 本文介绍了让我们先来预览一下代码运行效果吧:首先分析163邮箱登陆页面的网页结构(按F12或单击鼠标右键选择审查元素)1、定位到登陆框(注意
  • 1. document.form.item 问题 (1)现有问题:现有代码中存在许多 document.formName.item(&quo
  • 本文实例为大家分享了python实现坦克大战的具体代码,供大家参考,具体内容如下本游戏制作代码量较大具体代码与图片声源可以在我的GitHub
  • 我想做一个页面,10秒后转向其它页。想在网页中显示10秒的倒计时。谢谢了。对JS不懂  方法一:<html><h
  • Python 处理数据的实例详解最近用python(3.2的版本)写了根据特定规则,处理数据的一个小程序,用到了一些python常用的基础知
  • Java的idea在更新2020.1时就更新了官方汉化,当时Pycharm还没用出现汉化,但这两天提示我更新2020.1.1的时候,我发现p
  • 如何制作一个WAP手机的WML网页?代码如下:<%@Language=VBScriptMaxNoAds = 10'
  • 学一门新技术或者新语言,我们都要首先学会如何去适应这们新技术,其中在适应过程中,我们必须得学习如何调试程序并打出相应的log信息来,正所谓“
手机版 网络编程 asp之家 www.aspxhome.com