加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动 > 正文

一行代码将Pandas加速4倍

发布时间:2020-01-10 23:44:42 所属栏目:移动 来源:站长网
导读:副标题#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,因此不会有任何代码错误或错误。

(编辑:西安站长网)

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

热点阅读