如何用Modin来加速Pandas的单行变化

如何用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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程