ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在Python中转换表格数据

2023-07-31 18:46:18  阅读:273  来源: 互联网

标签:Pandas  Python  PostgreSQL


介绍

这一切都从简陋的桌子开始。一个从未真正“发明”过的概念,因为它从最早的记录保存形式中不断完善。即使在今天,或者更确切地说,特别是在今天,在表中存储和转换数据的方法也在不断发展。从比以往任何时候都更强大的PostgreSQL等关系数据库,到Dask或Spark等极其可扩展的地图减少解决方案。当然,还有古老的电子表格。

但回到你的困境:你想在Python中工作并保持简单,所以没有独立的SQL或分布式系统。在这种情况下,有所有数据框架和数据表框架可供选择。让我们比较四个流行的:Pandas(现任者)、Polars(挑战者)、PyArrow(低级柱状)和DuckDB(正在进行/嵌入式分析SQL)。

文档和生态系统

与任何要尝试的新库一样,易用性和开始黑客攻击的速度是一个很大的考虑因素。在这方面,最强的竞争者是Pandas和DuckDB。Pandas拥有庞大的文档、教程和问答线程生态系统。如果某些数据类型没有内置,很有可能有人已经为它编写了一个库。DuckDB的比较方式取决于您对SQL的熟悉程度(请查看我们之前的博客文章以了解一些上下文)。对于那些熟悉古代咒语的人来说,开始使用可能比熊猫更快。双重地考虑到DuckDB的示例丰富文档。

极地也有广泛的记录。但在生态系统和支持方面,它无法与熊猫竞争(它在StackOverflow上的问题减少了200多倍)。来自Polars的错误消息有时也可能非常神秘,因为它使用额外的抽象层(Rust和Arrow)。这一切都使首次用户的实验变得更加困难。

最后,PyArrow故意是一个较低级别的框架。它在很大程度上是其他图书馆的积木。这反映在文档中,文档更具技术性,更不像教程。不过,如果你愿意付出努力,它是一个特别强大的工具。

必须快点走

熊猫只能以大约30公里/小时的速度奔跑,所以它们无法与一些鸭子可以达到的80公里/小时+空速相媲美......啊,等等,不,Python库,不是动物群。让我们再试一次。

使用大约2.5 GB / 8,500,000行带有分类信息的鸟类目击数据集,我在四个库上运行了一些基准。第一次测试执行一个简单的分组操作,使用数据集的一部分计算每个物种的目击次数。在我的机器(M2 Pro MacBook,16GB RAM)上,这种转换与PyArrow相当相当的60毫秒,Polars为130毫秒,DuckDB为160毫秒。不过,Pandas是一个有趣的案例:使用其默认的c引擎,它是迄今为止最慢的,需要超过1.6秒才能完成。不过,使用其实验性的PyArrow引擎,结果将得到震荡:熊猫只花了80毫秒,击败了除PyArrow以外的所有人。虽然绝对数字并不重要,但库之间的相对差异很能说明问题。这也很好地转化为其他简单的操作和小数据集。

简单的转换基准条图显示,PyArrow的平均转换执行时间最低,然后是Polars,第三个DuckDB,最后是Pandas最长的

看着一个使用整个分类表的更复杂的转换,事情确实发生了一些变化。第二次测试执行两个连接和一些列计算,计算每个分类群和特定地理区域内每个物种的目击次数。不幸的是,这里还不能使用PyArrow引擎;所以你只需要想象带有PyArrow的熊猫会在这里表现得与Polars相似[1]。

复杂的转换基准条图显示DuckDB现在是最快的,其次是Polars,然后是PyArrow,最后是Pandas

不过,这两项测试的大局是一样的:Polars、DuckDB和(可能还有)PyArrow的Pandas的性能具有可比性,而具有默认引擎的Pandas则要慢得多。对于非常小的数据集,这种差异可以忽略不计。但对于像这样的中型数据集,特别是对于大型数据集或重复性任务,影响可能很大。

使用Polars或DuckDB over PyArrow等更高级别的库也是一个好主意,因为后者需要更多关注才能优化性能。与此相关,Dataroots鲁汶办公室周围的大多数水鸟物种都属于鸭子/鹅/天鹅科。这里绝对没有北极熊。对我来说,这听起来像是科学证明DuckDB的去向

标签:Pandas, Python, PostgreSQL
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有