加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

数据处理必看:如何让你的Pandas循环加快71803倍

发布时间:2019-08-28 00:35:23 所属栏目:教程 来源:skura
导读:雷锋网 AI 开发者按,如果你使用 python 和 pandas 进行数据分析,那么不久你就会第一次使用循环了。然而,即使是对小型数据集,使用标准循环也很费时,你很快就会意识到大型数据帧可能需要很长的时间。当我第一次等了半个多小时来执行代码时,我找到了接

我们可以将 apply 与 Lambda 函数一起使用。我们要做的就是指定轴。在这种情况下,我们必须使用 axis=1,因为我们要执行一个列操作:

数据处理必看:如何让你的Pandas循环加快71803倍

此代码甚至比以前的方法更快,只需要 27 毫秒就能完成。

pandas 矢量化——快 9280 倍

现在我们可以讨论一个新话题了。我们利用矢量化的优点来创建真正快速的代码。重点是避免像前面的例子 [1] 中那样的 Python 级循环,并使用优化的 C 代码,这个代码使用内存的效率更高。我们只需要稍微修改函数:

  1. df['Draws'] = 'No_Game'     
  2.         df.loc[((home == TEAM) & (ftr == 'D')) | ((away == TEAM) & (ftr == 'D')), 'Draws'] = 'Draw'
  3.        df.loc[((home == TEAM) & (ftr != 'D')) | ((away == TEAM) & (ftr != 'D')), 'Draws'] = 'No_Draw'  
  4.        def soc_iter(TEAM,home,away,ftr):     

现在我们可以用 pandas series 作为输入创建新列:

数据处理必看:如何让你的Pandas循环加快71803倍

在这种情况下,我们甚至不需要循环。我们要做的就是调整函数的内容。现在我们可以直接将 pandas series 传递给我们的函数,这会导致巨大的速度增益。

Numpy 矢量化——速度快 71.803 倍

在前面的示例中,我们将 pandas series 传递给了函数。通过添加.values,我们收到一个 Numpy 数组:

数据处理必看:如何让你的Pandas循环加快71803倍

Numpy 数组非常快,我们的代码运行时间为 0305 毫秒,比开始使用的标准循环快 71803 倍。

结论

如果您使用 python、pandas 和 Numpy 进行数据分析,那么代码总会有一些改进空间。我们比较了五种不同的方法,在计算的基础上增加了一个新的列到我们的数据框架中。我们注意到在速度方面存在巨大差异:

数据处理必看:如何让你的Pandas循环加快71803倍

如果你从这篇文章中选择两条规则,我会很高兴:

  • 如果确定需要使用循环,则应始终选择 apply 方法
  • 否则,矢量化总是更好的,因为它更快

本文转自雷锋网,如需转载请至雷锋网官网申请授权。

(编辑:辽源站长网)

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

推荐文章
    热点阅读