📜  如何使用 Modin 通过 One-Line 更改来加速 Pandas?

📅  最后修改于: 2022-05-13 01:55:04.671000             🧑  作者: Mango

如何使用 Modin 通过 One-Line 更改来加速 Pandas?

在本文中,我们将看到如何使用 modin 库提高 Pandas 的计算速度。 Modin 是一个与 Pandas 非常相似的Python库(在语法方面几乎相同),能够处理无法一次性放入 RAM 的庞大数据集。就以 MB 和几 GB 大小的数据集的执行速度而言,Pandas 已经足够好了,但是当我们处理非常大的数据集时,处理数据的速度成为瓶颈。

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,因为它使用了我系统上的所有可用内核。同样使用 time 模块来测量运算速度以相互比较,结果在这种情况下, Modin 比 pandas 快 25 倍

代码:

Python3
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}")


Python3
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 Appending Time :0.682852745056152
Modin Appending Time :0.027661800384521484

示例 2:Modin 比 pandas 快 4.4 倍。

这里我们使用了一个大小为 602 MB 的 CSV 文件,可以从此链接下载。还将文件重命名为 demo.csv 以保持简短。在下面的代码中,我们使用了 fillna() 方法,该方法遍历整个 DataFrame 并使用所需的值填充所有 NaN 值,在我的示例中它是 0。

代码:

蟒蛇3

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