pandas读取、运算数据时,如何让电脑性能最大化

pandas读取、运算数据时,如何让电脑性能最大化

1 背景分析

pandas库是python中最有名的数据分析库,但是有一个很烦人的缺点:不适用于大规模数据。
pandas默认只调用电脑单个的CPU进行数据读取和运算【python程序中的多线程编程实现实际上都是伪实现】。
但是当前的电脑大多是4核,甚至8核,而如果常规使用pandas意味着我们没有充分使用电脑的性能。

2 解决方案

有问题出现,自然就会围绕问题产生很多的创意设计和解决方案,这是世界得以发展的根源所在,扯远了,回正题。
给大家推荐一款专门为加速pandas而开发的包----【modin】, 这个库可以自动按照电脑CPU数调整运行的核数。

2.1 安装方法
	pip install modin
2.2 modin使用

导入pandas的时候通过modin.pandas进行导入。

import modin.pandas as pd
2.3 对比使用modin.pandas和pandas的读取数据性能差异

使用modin.pandas读取数据:

import time
import modin.pandas as pd


starttime = time.time()
df = pd.read_csv('data/test.csv')
endtime = time.time()
print('读取100M数据所用的时间:%s' % (endtime-starttime))
读取100M数据所用的时间:0.5474761009212651

使用pandas读取数据:

import time
import pandas as pd


starttime = time.time()
df = pd.read_csv('data/test.csv')
endtime = time.time()
print('读取100M数据所用的时间:%s' % (endtime-starttime))
读取100M数据所用的时间:1.411081828607715

modin只用了0.55s,读取数据的速度加快了2.4倍。

2.4 对比使用modin.pandas和pandas的处理数据性能差异

使用pandas处理数据:

import time
import pandas as pd

df = pd.read_csv('data/test.csv')
starttime = time.time()
newdf = pd.concat([df for _ in range(100)])
endtime = time.time()
print(endtime-starttime)
=================================================
8.425022888182846

使用modin.pandas处理数据:

import time
import modin.pandas as pd

df = pd.read_csv('data/test.csv')
starttime = time.time()
newdf = pd.concat([df for _ in range(100)])
endtime = time.time()
print(endtime-starttime)
=================================================
0.6486723553767629

同样的pandas中的concat()方法操作,使用modin.pandas比pandas快了15倍多

3 拓展知识

modin目前仍然正在不断更新中,并不支持所有的pandas的函数加速。如果加速遇到报错,说明这个操作modin不支持。
默认modin会调用电脑全部的cpu,如果不想全部调用,可以使用ray来限制cpu使用数。

import ray
import warnings
warnings.filterwarnings('ignore')
ray.init(num_cpus=2, ignore_reinit_error=True)
import modin.pandas as pd

如果待操作的数据文件远大于电脑内存RAM,可以设置

import os
os.environ["MODIN_OUT_OF_CORE"]='true'
import modin.pandas as pd
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值