新知榜官方账号
2023-08-22 11:37:16
Modin是一个Python第三方库,可以通过并行来处理大数据集。它的语法和pandas非常相似,因其出色的性能,能弥补Pandas在处理大数据上的缺陷。本文会解释何时该用Modin处理数据,并给出Modin的一些真实案例。
Pandas是python数据分析最常用的工具库,数据科学领域的大明星。Pandas受欢迎的原因在于它简洁易用的API,并且集成了Numpy、Matplotlib、Scipy等众多数据科学库,堪称Python+SQL+Excel的结合体。但Pandas并不是完美的,大数据是它的软肋。由于设计原因,Pandas只能在单核上运行,数据处理能力有限。目前大部分计算机虽都是多核CPU,Pandas却心有余而力不足,无法用到多核。
正因为大多人都熟悉了Pandas的语法结构,所以想换一种新的数据分析库并不容易,会增加很多的学习成本。如果在保留Pandas语法和API的前提下,又能增加大数据处理能力,这将会一个完美的解决方案。Modin就是这样一个存在。只要你有使用Pandas的经验,就可以轻松上手Modin。
Modin是一个Python第三方库,可以弥补Pandas在大数据处理上的不足,同时能将代码速度提高4倍左右。Modin以Ray或Dask作为后端运行。Ray是基于python的并行计算和分布式执行引擎。Dask是一个高性能并行分析库,帮助Pandas、Numpy处理大规模数据。与pandas不同,Modin能使用计算机中所有的CPU内核,让代码并行计算。当用4个进程而不是一个进程(如pandas)运行相同的代码时,所花费的时间会显著减少。
Modin的主要特点:使用DataFrame作为基本数据类型;与Pandas高度兼容,语法相似,几乎不需要额外学习;能处理1MB到1TB+的数据;使用者不需要知道系统有多少内核,也不需要指定如何分配数据。
首先要安装Modin,使用pip安装即可。前面说过,Modin使用Ray或Dask作为后端,在这里我们使用dask,命令行输入以下代码同时安装Modin和Dask:
pip install modin[dask]
接下来是导入Modin,这是重点。Modin宣称改一行代码就可以加速pandas,只需将:
import pandas as pd
改为
import modin.pandas as pd
除了速度更快外,其他要用的的语法、api和Pandas一模一样。我们来试试分别用Modin和pandas读取200MB的CSV文件,看哪个速度更快。
# 使用pandas读取数据
import pandas as pd
import time
times = time.time()
df = pd.read_csv("test.csv")
e = time.time()
print("Pandas读取时间 = {}".format(e-s))
# 使用Modin读取数据
import modin.pandas as pd
s = time.time()
df = pd.read_csv("test.csv")
e = time.time()
print("Modin读取时间 = {}".format(e-s))
返回:Pandas是3.3秒,Modin是1.9秒,速度快了接近1倍。我的电脑是4核CPU,Modin加载过程中所有内核都被用上了。如果用8核来跑,加载时间更少。
简单对比了Modin和Pandas读取200M文件后,我们再试下读取1GB的CSV文件有多大差异。
# 使用pandas读取数据
import pandas as pd
import time
df_pandas = pd.read_csv("test1.csv")
s = time.time()
result = df_pandas.append(df_pandas)
e = time.time()
print("Pandas append时间 = {}".format(e-s))
# 使用Modin读取数据
import modin.pandas as pd
df_modin = pd.read_csv("test1.csv")
s = time.time()
result = df_modin.append(df_modin)
e = time.time()
print("Modin append时间 = {}".format(e-s))
输出:Pandas用时11.3秒,Modin用时7.6秒。
# 使用pandas读取数据
import pandas as pd
import time
df_pandas = pd.read_csv("test.csv")
s = time.time()
result = pd.concat([df_pandas]*5)
e = time.time()
print("Pandas concat时间 = {}".format(e-s))
# 使用Modin读取数据
import modin.pandas as pd
df_modin = pd.read_csv("test.csv")
s = time.time()
result = pd.concat([df_modin]*5)
e = time.time()
print("Modin concat时间 = {}".format(e-s))
输出:Pandas用时3.7秒,Modin用时0.5秒。
通过上面三个函数的比较,Modin在使用append、concat等方法上要比Pandas快5倍以上。
现在有很多库可以实现对Pandas的加速,比如Dask、Vaex、Ray、CuDF等,Modin和这些库对比有什么样的优势呢?
Modin可以说是Pandas的加速版本,几乎所有功能通用。Vaex的核心在于惰性加载,类似spark,但它有独立的一套语法,使用起来和Pandas差异很大。如果你已经写好基于pandas的脚本,只是想加速运行代码,那么Modin是最佳选择。如果你只是想简单统计或可视化大数据集,可以考虑Vaex。
Dask既可以作为Modin的后端引擎,也能单独并行处理DataFrame,提高数据处理速度。但Dask对Pandas并没有很好的兼容性,没办法像Modin那样,只需改变一行代码,就可以轻松使用Pandas处理大数据集。
RAPIDS加速效果非常好,但它需要有GPU的加持,没有Modin那么便捷。
感谢大家的支持和喜欢,小编会每天分享更多Python学习的干货知识给大家,所以大家别忘了关注小编哦。更多Python爬虫、数据分析、办公自动化、全栈开发、人工智能学习资料关键字:Modin、Python、数据分析、Pandas、大数据处理、并行计算
相关工具
相关文章
推荐
用Deepseek写AI绘图提示词,像呼吸一样简单!
2025-02-19 16:12
你以为AI绘画是黑科技?其实早成了“路边摊生意”!
2025-02-19 10:15
Flux爆火,全网最全面最详细的Flux使用教程!
2025-02-18 14:19
用AI如何创作音乐,实战教学来啦!
2025-02-17 17:23
MidJourney让你秒变绘画大神,从零开始画哪吒!
2025-02-17 14:56
AI应用新境界:让人工智能成为你的得力助手
2025-02-14 15:45
AI短片革命:当创作遇上智能,人人都能成为导演
2025-02-14 14:53
AI狂潮下的人类职场:是失业危机还是进化契机?
2025-02-13 16:53
开启影视创作新纪元,效率提升 10 倍的神器来了!
2025-02-13 15:11
深度解析DeepSeek:当AI技术照进创作产业的未来
2025-02-12 17:16