答案先写在开头,免得你们直接拉到下面看结果~
modin.pandas 确实能使得一部分函数使用多核cpu进行加速处理,但是现在有些功能还不完善,有些函数还是用的默认pandas处理…
具体哪些函数是可以加速的可以往下看看
主要测试了apply,groupby,read_csv

<>一、Modin.pandas

在讲modin之前,简单介绍一下pandas,pandas主要是python用来处理数据的时候用到的一个库,并且为了追求效率,并不是用python写的,底层逻辑用的是c语言。而且对于各种计算逻辑已经被开发者开发到相对优秀的程度了。

但是即便如此,由于python本身语言的特点,pandas也只能在单核上进行计算,因此在考虑加速pandas处理大量数据的时候,使用多核cpu也就成为第一考虑目标了。
这个时候Modin项目就出现了。

Modin是加州大学伯克利分校RISELab的早期项目,旨在促进分布式计算在数据科学中的应用。它是一个多进程Dataframe库,具有与pandas相同的API,允许用户加速其Pandas工作流程。

总而言之,modin.pandas就是在pandas的基础之上多封装了一层使用多核cpu进行加速计算。

废话不多说,我们直接看试验结果。

<>二、Modin.pandas试验

测试代码如下
def pandas_test(): import pandas as pd from time import time df = pd.DataFrame(
zip(range(1000000),range(1000000,2000000)),columns=['a','b']) start = time() df[
'c'] = df.apply(lambda x:x.a+x.b ,axis=1) df['d'] = df.apply(lambda x:1 if x.a%2
==0 else 0, axis=1) print('pandas_df.apply Time: {:5.2f}s'.format(time() - start
)) start = time() group_df = df[['d','a']].groupby('d',as_index=False).agg({"a":
['sum','max','min','mean']}) print('pandas_df.groupby Time: {:5.2f}s'.format(
time() - start)) start = time() data = pd.read_csv('test_modin.csv') print(
'pandas_df.read_csv Time: {:5.2f}s'.format(time() - start)) def
modin_pandas_test(): import modin.pandas as pd from time import time df = pd.
DataFrame(zip(range(1000000),range(1000000,2000000)),columns=['a','b']) start =
time() df['c'] = df.apply(lambda x:x.a+x.b ,axis=1) df['d'] = df.apply(lambda x:
1 if x.a%2==0 else 0, axis=1) print('modin_pandas_df.apply Time: {:5.2f}s'.
format(time() - start)) start = time() group_df = df[['d','a']].groupby('d',
as_index=False).agg({"a":['sum','max','min','mean']}) print(
'modin_pandas_df.groupby Time: {:5.2f}s'.format(time() - start)) start = time()
data= pd.read_csv('test_modin.csv') print('modin_pandas_df.read_csv Time:
{:5.2f}s'.format(time() - start)) if __name__ == '__main__': pandas_test()
modin_pandas_test()
创建一个百万行的df 进行apply ,groupby
test_modin.csv 大小为70M

观察服务器CPU的使用情况,服务器背景 4核
1、pandas

2、modin.pandas

从cpu的使用情况确实可以看到modin.pandas比普通的pandas使用了多核cpu进行计算。
而且modin.pandas 会自动使用所有核进行计算,也就是cpu会一下子满负荷。。

OK,我们直接看代码的执行结果.

可以看到在apply跟read_csv方面确实是比原来的pandas快了,只是快的没有想象中的那么多。
但是在groupby方面却没有比原来快,反而比较慢了。
思考了一下原因:
groupby使用多核cpu进行计算有点像我们开多进程去进行并行计算,最好的切割方式就是以groupby的字段类别去切割对应的进程数,然后再对数据进行汇总。
在上面的测试例子中只有2个类别,并且还要对数据进行汇总计算,因此可能在效率上并没有最优运用到多核的特点,反而增加了汇总时间。
如果有大佬知道什么原因的可以告诉我一下嘛~

<>三、总结

至此我们的初步测试就结束了。

从结果上来看modin对pandas的加速还是很明显的,特别是对数据量比较大的时候,我上面测试的数据量相对于真正的大数据来说,只是一个demo。因此如果大家在处理大数据然后对pandas效率不是很满意的时候可以考虑用的一下modin.pandas
加速加速。
但是有部分函数modin.pandas还没完全实现。使用的时候要注意哦。

我是一只前进的蚂蚁,希望能一起前行。

如果对您有一点帮助,一个赞就够了,感谢!

注:如果本篇博客有任何错误和建议,欢迎各位指出,不胜感激!!!

技术
©2019-2020 Toolsou All rights reserved,
TP6验证器的使用示例及正确验证数据自宣布投资比特币以来 特斯拉市值蒸发逾2000亿美元华为认证HCIA-AI人工智能Java基础(冒泡排序)IAR安装使用教程GDOI2019 游记关于过年PYTHON入门期末复习汇总蚂蚁集团董事长井贤栋安抚员工:公司终究会上市的王者荣耀背景故事整合