详细内容或原文请订阅后点击阅览
我将 Pandas 运行时间减少了 95% — 这就是我做错的地方
最慢的 Pandas 代码“可以工作”,直到它不起作用为止。了解如何发现隐藏的瓶颈,避免昂贵的行操作,并知道 Pandas 何时不再足够。我将 Pandas 运行时间减少了 95% — 这是我做错的事情,首先出现在 Towards Data Science 上。
来源:走向数据科学已经有一段时间了。不过没什么太疯狂的。只是基本的数据清理、探索性数据分析和一些必要的功能。我还探索了诸如方法链接之类的内容,以实现更干净、更有组织的代码,以及默默地破坏 Pandas 工作流程的操作,这两个内容我之前都写过。
我从来没有真正考虑过运行时。老实说,如果我的代码运行没有错误并给出了我需要的输出,我很高兴。即使我的所有笔记本单元需要几分钟才能完成,我也不在乎。没有错误就意味着没有问题,对吗?
然后我想到了矢量化的概念。然后有什么声音响起。
我像往常一样掉进了兔子洞。我读得越多,就越意识到“无错误”和“高效代码”是两个截然不同的东西。你的 Pandas 代码可能完全正确,但在规模上仍然非常糟糕。
所以这篇文章是我记录我的发现的。导致 Pandas 代码变慢的错误、为什么会发生、如何修复它们,以及 Pandas 本身何时可能成为瓶颈。如果您曾经运行过笔记本电脑并且只是假设等待时间是正常的,那么这个就适合您。
为什么“工作代码”不够好
这是我花了一段时间思考的原因。 Pandas 被设计为宽容的。您可以用十几种不同的方式编写代码,其中大多数都可以工作。您得到了输出,您的数据框看起来正确,然后继续。
但这种灵活性伴随着隐性成本。
与 SQL 或生产级数据系统不同,Pandas 不会强迫您考虑效率。当您做一些昂贵的事情时它不会警告您。它只是……做到了。慢慢地,有时。但它确实做到了。
这样想吧。 SQL 有一个查询优化器。它会查看您的要求并找出获得它的最有效方法。熊猫没有这个。它相信您能够编写高效的代码。如果你不知道高效是什么样子,你永远不会知道你错过了它。
分析:停止猜测,开始测量
这些都不是正确的举动。
