IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> pandas 多进程 pandarallel -> 正文阅读

[人工智能]pandas 多进程 pandarallel

背景

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

找到一个 pandas 多进程的方法,pandarallel 库,做一下测试。

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

数据处理

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

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

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

一共四个步骤。

单进程

'''单进程'''
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)

?

multiprocessing 多进程写法

这种写法网上一搜一大把,代码没有错,多进程任务可以执行,例如 run_task 函数中的任务是爬虫代码时,没有什么问题,但如果是数据清洗的代码,我测试就很久都跑不出来,所以以下写法不适用 pandas 多进程。

from multiprocessing import Pool
import os,time,random
import pandas as pd
import jieba
 

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)

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

    p = Pool()
    for index,row in data.iterrows():
        p.apply_async(run_task,args=(row,)) #添加进程任务,i 为传进去的进程任务的参数
    p.close() #不再添加新进程
    p.join() #等待所有子进程执行完毕,调用之前必须先调用 close(),针对 Pool 对象
    
    end = time.time()
    print(end - start)

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)

可以看到对比单进程效率提高了将近 1 倍 ;pandarallel? 文档:

GitHub - nalepae/pandarallel at v1.5.2

对应的多进程写法函数对照表,但值得注意的是 pandas 中的 apply,applymap,map 三个函数的区别,写对应的代码,别写错了;具体区别可参考:

Pandas 中map, applymap and apply的区别_小强的呼呼呼的博客-CSDN博客

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:17:41  更:2022-04-06 16:17:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:47:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码