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

如何使Pandas来加速你的代码?

发布时间:2019-10-19 04:39:13 所属栏目:建站 来源:George Seif
导读:Pandas对数据科学界来说是一份天赐的礼品。问任何一个数据科学家,他们喜好怎样行使Python处理赏罚他们的数据集,他们无疑交涉到Pandas。 Pandas是一个巨大的编程库的缩影:简朴、直观、成果普及。 然而,对数据科学家的一项通例使命,行使Pandas举办数千乃至

Pandas对数据科学界来说是一份天赐的礼品。问任何一个数据科学家,他们喜好怎样行使Python处理赏罚他们的数据集,他们无疑交涉到Pandas。

怎样使Pandas来加快你的代码?

Pandas是一个巨大的编程库的缩影:简朴、直观、成果普及。

然而,对数据科学家的一项通例使命,行使Pandas举办数千乃至数百万次的计较,如故是一个挑衅。你不能只是将数据放入,编写Python for轮回,然后祈望在公道的时刻内处理赏罚数据。

Pandas是为一次性处理赏罚整个行或列的矢量化操纵而计划的—轮回遍历每个单位格、行或列并不是这个库的计划用途。因此,在行使Pandas时,你应该思量到矩阵操纵是高度并行化的。

本指南将教你怎样行使Pandas的方法,它被计划用来行使矩阵运算。在此进程中,我将向你展示一些适用的节减时刻的能力和能力,它们将使你的Pandas代码运行得比那些可骇的Python for轮回快得多!

配置

在本教程中,我们将行使经典的鸢尾花数据集。我们通过行使seaborn加载数据集并打印出前5行来开始。

怎样使Pandas来加快你的代码?

此刻让我们成立一个基线,用Python for轮回来丈量我们的速率。我们将通过轮回遍历每一行来配置要在数据集上执行的计较,然后丈量整个操纵的速率。这将为我们提供一个基准,看看我们的新优化能在多洪流平上辅佐我们加快。

怎样行使pandas来加快你的代码?

在上面的代码中,我们建设了一个根基函数,它行使If-Else语句按照花瓣的长度选择花的类。我们编写了一个for轮回,通过轮回dataframe对每一行行使这个函数,然后丈量轮回的总运行时刻。

在我的i7-8700k计较机上,轮回运行5次均匀必要0.01345秒。

行使.iterrows()来实现轮回

我们可以当即做的最简朴但很是有代价的加快是行使Pandas的内置 .iterrows()函数。

在上一节中编写for轮回时,我们行使了 range()函数。然而,当我们在Python中对大范畴的值举办轮回时,天生器每每要快得多。在本文中(https://towardsdatascience.com/5-advancedfeaturesof-python-and-how-use-them-73bffa373c84),你可以阅读更多关于天生器怎样事变的信息,并加速运行速率。

Pandas中的 .iterrows()函数在内部实现了一个天生器函数,它将在每次迭代中“天生”一行数据。更精确地说, .iterrows()为DataFrame中的每一行天生(index, Series) 的对(元组)。这现实上与在原始Python中行使相同于 enumerate()的对象是一样的,可是运行速率要快得多。

下面我们修改了代码,行使 .iterrows()替通例的for轮回。在我上一节测试所用的统一台呆板上,均匀运行时刻为0.005892秒—进步了2.28倍!

怎样行使pandas来加快你的代码?

行使.apply()完全丢掉轮回

.iterrows()函数极大地进步了速率,但还远远不足。请始终记着,当行使为向量操纵计划的库时,也许有一种要领可以在完全没有for轮回的环境下很高效地完成使命。

提供这种成果的Pandas函数是 .apply()函数。我们的函数 .apply()接管另一个函数作为它的输入,并沿着DataFrame的轴(行、列等)应用它。在转达函数的这种环境下,lambda凡是可以利便地将全部内容打包在一路。

在下面的代码中,我们已经完全用 .apply()和lambda函数替代了for轮回来封装我们想要的计较。在我的呆板上,这段代码的均匀运行时刻是0.0020897秒—比原本的for轮回快6.44倍。

怎样行使pandas来加快你的代码?

.apply()之以是要快得多,是由于它在内部实行遍历Cython迭代器。假如你的函数刚好为Cython举办了很好的优化, .apply()将使你的速率更快。特另外甜头是,行使内置函数可以天生更干净、更可读的代码。

最后是行使cut

前面我提到过,假如你正在行使一个为向量化操纵计划的库,那么你应该始终探求一种不行使for轮回举办任何计较的要领。

相同地,很多以这种方法计划的库,包罗Pandas,都具有利便的内置函数,可以执行你正在探求的准确计较—可是速率更快。

Pandas的 .cut()函数接管一组 bins为输入,个中界说每个If-Else的范畴,以及一组 labels作为输入,个中界说为每个范畴返回哪个值。然后,它执行与我们用 compute_class()函数手动编写的操纵完全沟通的操纵。

查察下面的代码,看看 .cut()是怎样事变的。我们又一次获得了更干净、更可读的代码。最后, .cut()函数均匀运行0.001423秒—比原本的for轮回快了9.39倍!

怎样行使pandas来加快你的代码?

(编辑:河北网)

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

    热点阅读