如何用Modin来加速Pandas的单行变化
在这篇文章中,我们将看到如何使用modin库来提高pandas的计算速度。Modin是一个与pandas非常相似的python库(在语法上几乎相同),能够一次性处理无法装入RAM的巨大数据集。Pandas对于MB和GB大小的数据集的执行速度已经足够好了,但是当我们处理真正的大数据集时,处理数据的速度就成为了瓶颈。
Pandas库被设计为在单核上工作,因此随着现代计算能力的提高,现在每台个人笔记本电脑都至少有2个核心,Modin只是利用这个机会在所有可用的核心上执行操作,从而加快了整个过程。
要安装Modin和它的所有依赖项,请使用以下任何一个pip命令。
pip install modin[ray]
或,
pip install modin[dask]
或,
pip install modin[all]
为了限制使用的CPU数量,我们可以在你的脚本中添加以下2行代码。
import os
# this specifies the number of
# CPUs to use.
os.environ["MODIN_CPUS"] = "2"
示例1:数据帧追加操作:
Append()操作在pandas中非常常见,在下面的代码中,我们通过使用pandas和Modin运行10次来证明这一点,并对其进行计时,看看速度上的差异。很明显,Modin击败了pandas,因为它使用了我系统上所有可用的内核。同时使用时间模块来测量操作速度以相互比较,结果发现在这种情况下,Modin比pandas快25倍。
代码:
import pandas as pd
import modin.pandas as mpd
import time
start = time.time()
# Creating a Custom Dataframe
data = {'Name': ['Tom', 'nick', 'krish', 'jack',
'ash', 'singh', 'shilpa', 'nav'],
'Age': [20, 21, 19, 18, 6, 12, 18, 20]}
df = pd.DataFrame(data)
# Appending the dataframe to itself 10 times.
for _ in range(10):
df = df.append(df)
end = time.time()
print(f"Pandas Appending Time :{end-start}")
start = time.time()
modin_df = mpd.DataFrame(data)
# Appending the dataframe to itself 10 times.
for _ in range(10):
modin_df = modin_df.append(modin_df)
end = time.time()
print(f"Modin Appending Time :{end-start}")
输出 :
Pandas Appending Time :0.682852745056152
Modin Appending Time :0.027661800384521484
例子2:Modin比pandas快4.4倍。
这里我们使用一个大小为602MB的CSV文件,可以从这个链接下载。同时将该文件重命名为demo.csv以保持其简短。在下面的代码中,我们使用了fillna()方法,该方法浏览了整个DataFrame并将所有的NaN值填充为所需的值,在我的例子中是0。
代码:
import pandas as pd
import modin.pandas as mpd
# Reading demo.csv file into pandas df
df = pd.read_csv("demo.csv")
s = time.time()
df = df.fillna(value=0)
e = time.time()
print(f"Pandas fillna Time: {e-s})
# Reading demo.csv file into modin df
modin_df = mpd.read_csv("demo.csv")
s = time.time()
modin_df = modin_df.fillna(value=0)
e = time.time()
print(f"Modin fillna Time: {e - s})
输出 :
Pandas fillna Time: 1.2 sec
Modin fillna Time: 0.27 sec
极客教程