让我们面对现实吧,与C或Go相比,Python的速度确实引起了相当多的口水战。这让笔者在一段时间内对Python快速处理任务的能力产生了怀疑。目前,我正在尝试用Go进行数据科学研究——这是可能的——但在Python中做起来一点也不愉快,主要是由于语言的静态性质以及数据科学主要是一个探索领域的事实。并不是说用Go重写完成的解决方案不会提高性能,但这是另一篇文章的主题。到目前为止,作者至少忽略了Python更快处理任务的能力。我一直患有近视症——当你只看到一个解决方案而完全忽视其他解决方案的存在时,就会出现这种综合症。相信这种情况不只是作者本人。这就是为什么今天我想简单介绍一下如何让Pandas的日常工作变得更快、更愉快。更准确地说,该示例将重点关注行之间的迭代,并在此过程中执行一些数据操作。因此,废话不多说,一起进入正题。使数据集能够说明问题的最简单方法是声明一个单列DataFrame对象,其整数值范围为1到100,000:确实不需要更复杂的东西来解决Pandas的速度问题。为验证一切是否顺利,这里是前几行和数据集的整体形状:让我们从如何不进行选择开始。这是你不应该做的事情,我一直在使用(并且过度使用)这么多iterrows()方法。默认情况下它很慢,但你知道我为什么费心去寻找替代品(目光短浅)。为了证明您不应该使用iterrows()方法遍历数据框,我将做一个快速演示——声明一个变量并将其初始设置为0——然后按Values的当前值每次迭代的属性。增量。如果您想知道%%time魔术函数返回单元格执行所有操作所花费的秒数/毫秒数。让我们来看看这个函数是如何工作的:你现在可能会想,15秒来遍历100,000行并增加某个外部变量的值并不算多。但事实上它是——请参阅下一节了解原因。这是你应该做的现在有一个神奇的方法来拯救-itertuples()。顾名思义,itertuples()遍历数据框的行并返回一个命名的元组。这就是为什么你不能用方括号[]访问这些值,你需要使用.符号。我们现在将演示与几分钟前相同的示例,但使用itertuples()方法:瞧!使用itertuples()进行相同的操作大约快154倍!现在想象一下您正在处理数百万行的日常工作场景-itertuples()可以为您节省大量时间。在这个简单的示例中,我们已经看到对代码的微小更改会对整体结果产生巨大影响。这并不意味着itertuples()在每种情况下都会比iterrows()快150倍,但这确实意味着它在某种程度上每次都会更快。文渊网络仅供学习使用,如有侵权,请联系删除。我的公众号【Python圈】汇集了优质的技术文章和经验总结。学习Python的路上肯定会遇到困难,不要慌张,我这里有一套学习资料,包括40+电子书,600+教学视频,涉及Python基础、爬虫、框架、数据分析、机学习等等,别怕学不会!
