在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
遍历Pandas DataFrames可能非常慢,本文将向您展示一些加速办法,可将性能提升成千上万倍! 如果您使用Python和Pandas进行数据分析,即使对于小型DataFame,使用标准Python循环也是很费时间的,而对于大型DataFrame则需要花费特别长的时间。有什么方法可以优化呢?西面来看看不同遍历方法的性能 标准循环DataFrame(数据帧)是具有行和列的Pandas对象(objects)。如果使用循环,则将遍历整个对象。 Python无法利用任何内置函数,而且速度非常慢。在我们的示例中,我们获得了一个具有65列和1140行的DataFrame(数据框)。它包含2016-2019赛季的足球成绩。我们要创建一个新列,以指示特定球队是否参加过平局。我们可以这样开始:
由于我们在DataFrame(数据框架)中获得了英超联赛的每场比赛,因此我们必须检查感兴趣的球队(阿森纳)是否参加过比赛,以及这是否适用,他们是主队还是客队。如您所见,此循环非常慢,执行时间为20.7秒。让我们看看如何提高效率。 Pandas内置函数: iterrows() —快321倍在第一个示例中,我们遍历了整个DataFrame。
该代码花了68毫秒来运行,比标准循环快321倍。但是,许多人建议不要使用它,原因是:还有更快的选择和 apply()方法-快811倍
我们可以用 此代码比以前的方法更快,需要27毫秒完成。 Pandas 向量化—快9280倍我们利用向量化的优势来创建真正快速的代码。关键是要避免像之前的示例中那样的Python级别的循环,而要使用优化的C代码,该代码可以更有效地使用内存。只需要稍微修改一下函数:
现在我们可以用Pandas系列创建新的列: 在这种情况下,我们甚至不需要循环。我们要做的就是调整函数的内容。现在我们可以直接将Pandas系列传递给我们的函数,这会带来巨大的速度提升。 Numpy 向量化 —快71,803倍在前面的示例中,我们将Pandas系列传递给了函数。通过添加.values,我们得到一个Numpy数组: numpy数组之所以如此快,是因为我们获得了引用局部性的好处。我们的代码运行了0,305毫秒,比前文使用的标准循环快71803倍。 结论如果您使用Python,Pandas和Numpy进行数据分析,那么总会有一些空间可以改进您的代码性能。我们比较了五种不同的方法,它们根据一些计算在DataFrame中添加新列。我们注意到速度方面的巨大差异: 如果您从本文中学会了如下两个规则,我将很高兴:
参考资料
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13