加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

一行代码将Pandas加速4倍

发布时间:2020-01-12 00:37:08 所属栏目:评测 来源:站长网
导读:副标题#e# 虽然Pandas的功能非常强大,但是对于大数据集来说,确实是很慢的。 虽然 panda 是 Python 中用于数据处理的库,但它并不是真正为了速度而构建的。了解一下新的库 Modin,Modin 是为了分布式 panda 的计算来加速你的数据准备而开发的。 Pandas是处

让我们在 DataFrame 上做一些更复杂的处理。连接多个 DataFrames 是 panda 中的一个常见操作 — 我们可能有几个或多个包含数据的 CSV 文件,然后必须一次读取一个并连接它们。我们可以使用 panda 和 Modin 中的*pd.concat()*函数轻松做到这一点。

我们希望 Modin 能够很好地处理这种操作,因为它要处理大量的数据。代码如下所示。

import pandas as pddf =  

pd.read_csv("esea_master_dmg_demos.part1.csv")s = time.time()df =  

pd.concat([df for _ in range(5)])e = time.time()print("Pandas Concat  

Time = {}".format(e-s))import modin.pandas as pddf =  

pd.read_csv("esea_master_dmg_demos.part1.csv")s = time.time()df =  

pd.concat([df for _ in range(5)])e = time.time()print("Modin Concat  

Time = {}".format(e-s)) 

在上面的代码中,我们将 DataFrame 与自身连接了 5 次。pandas 在 3.56 秒内完成了连接操作,而 Modin 在 0.041 秒内完成,速度提高了 86.83 倍!看起来,即使我们只有 6 个 CPU 核心,DataFrame 的分区也有助于提高速度。

用于 DataFrame 清洗的 panda 函数是*.fillna()*函数。此函数查找 DataFrame 中的所有 NaN 值,并将它们替换为你选择的值。panda 必须遍历每一行和每一列来查找 NaN 值并替换它们。这是一个应用 Modin 的绝佳机会,因为我们要多次重复一个非常简单的操作。

import pandas as pddf =  

pd.read_csv("esea_master_dmg_demos.part1.csv")s = time.time()df =  

df.fillna(value=0)e = time.time()print("Pandas Concat Time =  

{}".format(e-s))import modin.pandas as pddf =  

pd.read_csv("esea_master_dmg_demos.part1.csv")s = time.time()df =  

df.fillna(value=0)e = time.time()print("Modin Concat Time =  

{}".format(e-s)) 

这次,Pandas 运行*.fillna()*用了 1.8 秒,而 Modin 用了 0.21 秒,8.57 倍的加速!

警告!

Modin 总是这么快吗?

并不是这样。

在有些情况下,panda 实际上比 Modin 更快,即使在这个有 5,992,097(近 600 万)行的大数据集上也是如此。下表显示了我进行的一些实验中 panda 与 Modin 的运行时间。

正如你所看到的,在某些操作中,Modin 要快得多,通常是读取数据并查找值。其他操作,如执行统计计算,在 pandas 中要快得多。

一行代码将Pandas加速4倍

使用 Modin 的实用技巧

Modin 仍然是一个相当新的库,并在不断地发展和扩大。因此,并不是所有的 pandas 功能都被完全加速了。如果你在 Modin 中尝试使用一个还没有被加速的函数,它将默认为 panda,因此不会有任何代码错误或错误。

默认情况下,Modin 将使用计算机上所有可用的 CPU 内核。在某些情况下,你可能希望限制 Modin 可以使用的 CPU 内核的数量,特别是如果你希望在其他地方使用这种计算能力。我们可以通过 Ray 中的初始化设置来限制 Modin 可以访问的 CPU 内核的数量,因为 Modin 在后端使用它。

import rayray.init(num_cpus=4)import modin.pandas as pd 

在处理大数据时,数据集的大小超过系统上的内存(RAM)的情况并不少见。Modin 有一个特殊的标志,我们可以设置为“true”,这将使其进入“out of core”模式。这意味着 Modin 将使用你的磁盘作为你的内存溢出存储,允许你处理比你的 RAM 大得多的数据集。我们可以设置以下环境变量来启用此功能:

export MODIN_OUT_OF_CORE=true 

总结

这就是使用 Modin 加速 panda 函数的指南。只需修改 import 语句就可以很容易地做到这一点。希望你发现 Modin 至少在一些情况下对加速 panda有用。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读