Pandas 多进程处理数据提高速度
作者:Python学习与数据挖掘 发布时间:2021-12-11 17:30:51
标签:Pandas,多进程,处理,数据,提高,速度
前言:
python 有自己的多进包 multiprocessing 去实现并行计算,但在Pandas处理数据中,使用 multiprocessing 并不好使,只听见风扇转啊转,就不见运行完毕。
为了提高一点数据清洗的速度,找到一个Pandas多进程的方法,pandarallel
库,做了一下测试。下面来看看具体过程吧
【注】文末提供技术交流方式
小数据集(先试过了1w)可能多进程还没单进程快,因为进程开启关闭也要一点时间。于是我弄了 100w 数据来测试:
利用以上数据做以下处理:
剔除 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)
输出:
在单进程的情况下,可以看到用时 294s,接近 5min
了。
2、多进程
multiprocessing
多进程写法,这种写法网上一搜一大把,代码没有错,多进程任务可以执行。
例如run_task
函数中的任务是爬虫代码时,没有什么问题,但如果是数据清洗的代码,我测试就很久都跑不出来:
接下来换成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)
输出:
可以看到改写后时间用时 154s(2min30s),比单进程快了一倍。关于 pandarallel 可以查看文档
对应的多进程写法函数对照表,Pandas中的 apply,applymap,map 三个函数的区别,写对应的代码:
来源:https://blog.csdn.net/weixin_38037405/article/details/123979210
0
投稿
猜你喜欢
- Python# coding=utf-8import timeimport sysdef func(): # 格式化输出时间 &
- 在 Python 的项目中,如何管理所用的全部依赖库呢?最主流的做法是维护一份“requirements.txt”,记录下依赖库的名字及其版
- PDOStatement::bindValuePDOStatement::bindValue — 把一个值绑定到一个参数(PHP 5 >
- 备份还原数据库备份数据库企业管理器--或用SQL语句(完全备份):backup database 数据库 to
- getpass模块的使用:在python中实现密码密文需要导入getpass模块,在python中要使用内置模块的话,需要使用import进
- Hough圆变换的原理很多博客都已经说得非常清楚了,但是手动实现的比较少,所以本文直接贴上手动实现的代码。这里使用的图片是一堆硬币:&nbs
- 使用ASP做网站虽然有点落伍,但在中国还是有很大市场的,因为大部分国内用户使用Windows Server服务器,在Windows Serv
- 题目1、 请输入一个整数 , 若该数是偶数 , 输出 “ 是偶数” ”
- 目录1. 注册百度云账号2. 安 * aidu python api3.调用摄像头4.完整测试程序1. 注册百度云账号注册百度智能云,提交申请
- 1、slice结构体首先我们来看一段代码package mainimport ( "fmt"
- Python 链接抖音python下载抖音内容的帖子网上有一些,但都比较麻烦,需要通过adb连接安卓手机后,模拟操作。我这么懒,这种事儿玩不
- PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,利用它可以实现自动化任务本章介绍了许多不
- 主要作用为指定图片像素:matplotlib.rcParams[‘figure.figsize']#图片像素 matplotlib.
- Update Scanner这个Firefox附加软件也是一种很好的选择。Update Scanner可以同时跟踪多个网页,并为不同的网页设
- Python int() 函数描述int() 函数用于将一个字符串或数字转换为整型。语法以下是 int() 方法的语法:class int(
- 搞了一上午,头都大了!最终解决问题。其实这问题老早就遇上了,但是比较懒,三下两下没整好便推开了搜索了一下,产生< msxml3.dll
- 本文实例讲述了Python实现方便使用的级联进度信息的方法。分享给大家供大家参考。具体实现方法如下:class StepedProgress
- 最近在查看asp之家的访客统计时,发现访客使用firefox浏览器的占了10%-15%,而大部分的访客使用的是IE6,呵呵我也是用IE6。而
- 本文实例讲述了php面象对象数据库操作类。分享给大家供大家参考。具体实现代码如下://此处构造一个数据库操作类,封装所有数据库操作 //可以
- 计算机一般来说是需要定期的清理,系统的内存不能无限延伸,同时有一些不需要的文件也可以得以清除掉。有些人会使用os.remove来进行文件的清