使用 pandas 对数据进行并行处理

使用pandarallel 对数据进行并行处理,加速 pandas中的map,apply。

pandas做数据分析很好用,map、apply使用的也比较多,非常的耗时间。虽然map性能优于apply,但是在处理大量数据的时候处理速度依然很慢。下面介绍几个加速map,apply的方法。

一、pandarallel 包(多进程)并行加速

1、安装pandarallel

pip install pandarallel

对于windows用户,有一个不好的消息是,它只能在Windows的linux子系统上运行(WSL),你可以在微软官网上找到安装教程:
https://docs.microsoft.com/zh-cn/windows/wsl/about

2、使用pandarallel

1、导入包
from pandarallel import pandarallel
2、初始化

初始化函数为 pandarallel.initialize(shm_size_mb,nb_workers,progress_bar)
参数:

shm_size_mb:是给pandarallel的内存空间分配的大小
nb_workers:设置使用多少个CPU的核数
progress_bar:设置是否显示每个CPU的进度条

在这里插入图片描述

# 查看计算机cpu核数
import multiprocessing
cup_num = multiprocessing.cpu_count()
print(f"计算机cpu核数:{cup_num}")

pandarallel.initialize(nb_workers=nb_workers,progress_bar=True)  # 初始化该这个b...并行库
4、使用方法

pandas 中的替换
apply替换parallel_apply
map替换parallel_map
在这里插入图片描述
样例:

import time
import pandas as pd
import numpy as np
import multiprocessing
cup_num = multiprocessing.cpu_count()
print(f"计算机cup核数:{cup_num}")
from pandarallel import pandarallel  # 导入pandaralle
pandarallel.initialize(nb_workers=cup_num-2,progress_bar=True)  # 初始化该这个b...并行库

# 调用的函数
def func(x):
    import math
    return math.sin(x.a**2) + math.sin(x.b**2)
df_size = int(5e6)
if __name__ == '__main__':
    # 需要在
    time_start = time.time()
    df = pd.DataFrame(dict(a=np.random.randint(1, 8, df_size),
                           b=np.random.rand(df_size)))
    res_parallel = df.parallel_apply(func, axis=1)
    time_end = time.time()
    print("并行代码耗时 %f s" % (time_end - time_start))

效果:
使用pandarallel并行计算
在这里插入图片描述
不使用pandarallel并行计算
在这里插入图片描述

参考
https://blog.csdn.net/u010751000/article/details/121391796
https://blog.csdn.net/weixin_45631815/article/details/124085118

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值