

Modin,只需一行代码加速你的Pandas
source link: https://zhuanlan.zhihu.com/p/355345183
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Modin,只需一行代码加速你的Pandas
Modin是一个Python第三方库,可以通过并行来处理大数据集。它的语法和pandas非常相似,因其出色的性能,能弥补Pandas在处理大数据上的缺陷。
本文会解释何时该用Modin处理数据,并给出Modin的一些真实案例。
下文内容主要包括:
- 为什么需要Modin?
- Modin厉害在哪里?
- Modin使用方法
- 对比Modin和Pandas
- 对比Modin和其他加速库有何不同? Modin VS Vaex Modin VS Dask Modin VS cuDF
为什么需要Modin?
Pandas是python数据分析最常用的工具库,数据科学领域的大明星。
Pandas受欢迎的原因在于它简洁易用的API,并且集成了Numpy、Matplotlib、Scipy等众多数据科学库,堪称Python+SQL+Excel的结合体。
但Pandas并不是完美的,大数据是它的软肋。
由于设计原因,Pandas只能在单核上运行,数据处理能力有限。目前大部分计算机虽都是多核CPU,Pandas却心有余而力不足,无法用到多核。
正因为大多人都熟悉了Pandas的语法结构,所以想换一种新的数据分析库并不容易,会增加很多的学习成本。
如果在保留Pandas语法和API的前提下,又能增加大数据处理能力,这将会一个完美的解决方案。
Modin就是这样一个存在。只要你有使用Pandas的经验,就可以轻松上手Modin。
Modin厉害在哪里?
Modin是一个Python第三方库,可以弥补Pandas在大数据处理上的不足,同时能将代码速度提高4倍左右。
Modin以Ray或Dask作为后端运行。
❝ Ray是基于python的并行计算和分布式执行引擎。
Dask是一个高性能并行分析库,帮助Pandas、Numpy处理大规模数据。
❞
那Modin有何特别之处呢?
与pandas不同,Modin能使用计算机中所有的CPU内核,让代码并行计算。
当用4个进程而不是一个进程(如pandas)运行相同的代码时,所花费的时间会显著减少。
Modin的主要特点:
- 使用DataFrame作为基本数据类型;
- 与Pandas高度兼容,语法相似,几乎不需要额外学习;
- 能处理1MB到1TB+的数据;
- 使用者不需要知道系统有多少内核,也不需要指定如何分配数据;
Modin使用方法
首先要安装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
s = 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
- read_csv
简单对比了Modin和Pandas读取200M文件后,我们再试下读取1GB的CSV文件有多大差异。
pandas:
# 使用pandas读取数据
import pandas as pd
import time
s = time.time()
df = pd.read_csv("test1.csv")
e = time.time()
print("Pandas读取时间 = {}".format(e-s))
Pandas读取时间 = 11.298792123794556
# 使用Modin读取数据
import modin.pandas as pd
s = time.time()
df = pd.read_csv("test1.csv")
e = time.time()
print("Modin读取时间 = {}".format(e-s))
Modin读取时间 = 7.6007184982299805
处理GB级的数据,Modin的优势也是显而易见的,当然处理时间会随计算机的不同有差异。
- append()
append在Pandas中用来添加新行,我们来看看Modin和Pandas做append操作时的速度差异。
Pandas:
# 使用pandas读取数据,200M文件
import pandas as pd
import time
df_pandas = pd.read_csv("test.csv")
s = time.time()
result = df_pandas.append(df_pandas)
e = time.time()
print("Pandas append时间 = {}".format(e-s))
Pandas append时间 = 1.242678165435791
Modin:
# 使用Modin读取数据,200M文件
import modin.pandas as pd
df_modin = pd.read_csv("test.csv")
s = time.time()
result = df_modin.append(df_modin)
e = time.time()
print("Modin append时间 = {}".format(e-s))
Modin append时间 = 0.2613077163696289
Pandas用时1.2秒,Modin用时0.2秒。
- Concat()
concat用来拼接多个DataFrame,也来测试一下差异。
Pandas:
# 使用pandas读取数据,200M文件
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))
Pandas concat时间 = 3.705094337463379
Modin:
# 使用Modin读取数据,200M文件
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))
Modin concat时间 = 0.5255951881408691
Pandas用时3.7秒,Modin用时0.5秒。
通过上面3个函数的比较,Modin在使用append、concat等方法上要比Pandas快5倍以上
对比Modin和其他加速库有何不同?
现在有很多库可以实现对Pandas的加速,比如Dask、Vaex、Ray、CuDF等,Modin和这些库对比有什么样的优势呢?
「Modin Vs Vaex」
Modin可以说是Pandas的加速版本,几乎所有功能通用。
Vaex的核心在于惰性加载,类似spark,但它有独立的一套语法,使用起来和Pandas差异很大。
如果你已经写好基于pandas的脚本,只是想加速运行代码,那么Modin是最佳选择。如果你只是想简单统计或可视化大数据集,可以考虑Vaex。
「Modin Vs Dask」
Dask既可以作为Modin的后端引擎,也能单独并行处理DataFrame,提高数据处理速度。
但Dask对Pandas并没有很好的兼容性,没办法像Modin那样,只需改变一行代码,就可以轻松使用Pandas处理大数据集。
「Modin vs. RAPIDS (cuDF)」
RAPIDS加速效果非常好,但它需要有GPU的加持,没有Modin那么便捷。
本文翻译自:Shrivarsheni的博客
Recommend
-
64
Pandas on Ray:仅需改动一行代码,即可加速Pandas
-
67
README.rst Modin
-
49
Pandas对数据科学界来说是一份天赐的礼物。问任何一个数据科学家,他们喜欢如何使用Python处理他们的数据集,他们无疑会谈到Pandas。 ...
-
35
寒假何不学python
-
24
Markdeep 是一个用来写纯文本的插件,它能以 Markdown 的语法与渲染方式纯文本,并在网页上展示。同时,除了 Markdown 语法,Markdeep 还额外支持图表、...
-
7
VS Code 是一个由微软开发,同时支持 Windows、 Linux 和 macOS 等操作系统的免费代码编辑器,它支持测试,并内置了 Git 版本控制功能,同时也具...
-
4
“ Merbridge项目开源上线,只需要在 Ist...
-
10
This article was published as a part of the Data Science Blogathon. Introduction to Pandas Pandas is a python library t...
-
6
This article was published as a part of the Data Science Blogathon. Introduction to Speeding up Pandas in Python Pandas is the...
-
10
一行代码12倍加速Bert推理,OpenAI编程语言加持的引擎火了 作者:机器之心 2022-10-27 16:03:57 项目作者表示,未来还将在预热速度、训练支持、多 GPU 支持、量化和硬件支持等多方面改进推理引擎 Kernl。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK