pandarallel库 | 多核运行提升 pandas 速度
只需更改一行代码, pandarallel库 就可以充分利用CPU性能,并行化所有 Pandas 操作,加速你的数据处理。
pandarallel 还提供漂亮的进度条(在笔记本和终端上可用)以 大致了解要完成的剩余计算量。
没有并行化
并行化
可以看到,使用并行化后,处理速度快了很多。
一、性能对比
cpu有n个核,大概并行化会提升大概n倍。以下是使用和不使用 Pandaral·lel 的比较基准。实验环境:
操作系统:Linux Ubuntu 16.04 硬件:Intel Core i7 @ 3.40 GHz - 4 核
并行操作的运行速度大约是标准操作的 4 倍(除了标准操作的运行速度仅快 3.2 倍)。
二、特性
pandarallel 目前实现以下 API:pandas
三、使用
Mac和linux,没有什么特殊的用法, 但在 Windows 上, 您掉用的函数必须是自包含的,并且不应依赖于外部资源。为了降低大家的记忆压力, 咱们假设所有系统,都要满足自包含且不依赖外部资源。
3.1 安装
pip install pandarallel
3.1 正确用法
定义好计算函数func, 标准的pandas的批计算是在pd.Series基础上掉用apply方法,即 pd.Series.apply(func)。
而pandarallel代码语法略微不同, pd.Series.parallel_apply(func)。
import pandas as pd
from pandarallel import pandarallel
pandarallel.initialize()
def func(x):
import math
# 在函数体func内导入math,掉用math, okay!
return math.sin(x.a**2) + math.sin(x.b**2)
df = pd.read_csv('实验的csv文件路径')
df['result'] = df['某个数值字段'].parallel_apply(func)
3.2 错误用法
import pandas as pd
from pandarallel import pandarallel
pandarallel.initialize()
import math
def func(x):
# func不能依赖外部资源, math定义在函数体func之外, 会出问题的!
return math.sin(x.a**2) + math.sin(x.b**2)
df = pd.read_csv('实验的csv文件路径')
df['result'] = df['某个数值字段'].parallel_apply(func)
3.3 使用场景
并行化是有代价的(实例化新进程、通过共享内存发送数据、 ...),因此,并行化只有在并行化的计算量大时才有效足够高。对于非常少量的数据,并不总是使用并行化值得。
pandarallel 通过使用计算机cpu所有内核来绕过此限制。但代价是,需要两倍于标准操作的内存占用。
精选内容
数据集 | 3571万条专利申请数据集(1985-2022年)
预训练模型 | 使用1000w专利摘要训练word2vec模型,可用于开发词典
使用中文MD&A数据集训练word2vec预训练模型, 可扩展或新建会计金融等领域的情感词典
数据集 | 2001-2022年A股上市公司年报&管理层讨论与分析
管理世界 | 用正则表达式、文本向量化、线性回归算法从md&a数据中计算 「企业融资约束指标」
中国管理科学 | 使用业绩说明会文本数据测量上市公司前瞻性信息
数据集 | 2001-2022年A股上市公司年报&管理层讨论与分析
数据集 | 200w政府采购合同公告明细数据(1996.6-2022.12)