详细内容或原文请订阅后点击阅览
使用 Polars 代替 Pandas:性能深入探究
在本文中,我们使用真实问题探讨了三个真实数据问题,其中 Polars 在每个指标上都超过了 Pandas。
来源:KDnuggets简介
在过去的十年中,Pandas 一直是 Python 数据工作的基础。对于适合内存的数据集,它速度很快且足够熟悉,因此任何程序员都很少考虑切换库。
然而,一旦开始处理数百万行,缺陷就开始出现:需要几秒钟的 groupby 操作、消耗 RAM 的中间副本以及作为 Python 级循环而不是矢量化 C 或 Rust 代码运行的窗口函数。
Polars 是一个在 Apache Arrow 之上用 Rust 构建的 DataFrame 库。它的设计将并行性和惰性求值作为一流的功能。 Pandas 预先按顺序执行每个操作,而 Polars 可以构建查询计划并在执行之前对其进行优化,大多数操作会自动在所有可用的 CPU 核心上同时执行。
在本文中,我们使用 StrataScratch 编码平台中的真实问题探索三个真实数据问题。对于每个问题,我们都会比较两个库的解决方案,并指出性能差异最重要的地方。
使用rank() 与with_row_count():活动排名
在此问题中,目标是根据发送的电子邮件总数查找每个用户的电子邮件活动排名。拥有最多电子邮件的用户排名 1。结果必须按电子邮件总数降序排序,使用字母顺序作为决胜局,并且每个排名必须不同,即使两个用户的电子邮件数量相同。
数据视图
google_gmail_emails 表为每封发送的电子邮件存储一行,其中包含发件人 ID (from_user)、收件人 ID (to_user) 以及电子邮件的发送日期。这是表格的预览:
Grain(一个输出行的含义):一个用户,其电子邮件总数和唯一活动排名。
常见错误
解决方案
1. Pandas 解决方案
我们将 from_user 重命名为 user_id,按用户分组,计算电子邮件数量,计算第一排名,并按电子邮件数量降序排序,并按字母顺序进行平局。
2. Polars 解决方案
