欢迎光临散文网 会员登陆 & 注册

Pandas 2.0 主要优势以及代码实现!

2023-09-13 16:59 作者:程序员大致学长  | 我要投稿

四月,官方发布pandas 2.0.0,在数据科学社区内掀起了轩然大波。

由于其广泛的功能性和多功能性,如果没有 import pandas as pd,几乎不可能做到数据操纵,对吧?

虽然我没意识到所有的大肆宣传,数据中心的人工智能社区迅速伸出了援手:


截图来自作者 2.0发行版看起来在数据科学社区造成了相当大的影响,很多用户都称赞新版本里的改进。


有趣的事实:你意识到这个发行版用了惊人的3年时间制作的吗?这就是我所说的“对社区的承诺”!

所以pandas 2.0带来了什么?让我们立刻深入看一下!



表现、速度以记忆优势

正如我们所知,pandas是使用numpy建立的,并非有意设计为数据帧库的后端。

因为这个原因,pandas的主要局限之一就是较大数据集的内存处理。在这一版本里,大的改变来自于为pandas数据引入Apache Arrow后端。

从本质上讲,Arrow 是一种标准化的内存中列式数据格式,具有适用于多种编程语言(C、C++、R、Python 等)的可用库。对于Python,有PyArrow,它基于Arrow的C++实现,因此速度很快!

所以,长话短说,PyArrow考虑到了我们以往1点几版本的内存限制,允许我们执行更快、内存更高效的数据操作,尤其对大型数据集来说。

如您所见,使用新的后端使读取数据的速度提高了近 35 倍。其他值得指出的方面:

  • 如果没有 pyarrow 后端,每个列/特征都存储为自己的唯一数据类型:数字特征存储为 int64 或 float64,而字符串值存储为对象;

  • 使用 pyarrow,所有功能都使用 Arrow dtypes:请注意 [pyarrow] 注释和不同类型的数据:int64、float64、字符串、时间戳和双精度:

Arrow数据类型及Numpy索引

除了读取数据(这是最简单的情况)之外,您还可以期待一系列其他操作的其他改进,尤其是那些涉及字符串操作的操作,因为 pyarrow 对字符串数据类型的实现非常有效:

事实上,Arrow 比 numpy 具有更多(和更好的支持的)数据类型,这些数据类型在科学(数字)范围之外是必需的:日期和时间、持续时间、二进制、小数、列表和地图。浏览 pyarrow 支持的数据类型和 numpy 数据类型之间的等效性实际上可能是一个很好的练习,以便您学习如何利用它们。

现在也可以在索引中保存更多的 numpy 数值类型。传统的 int64、uint64 和 float64 为所有 numpy 数字 dtypes Index 值打开了空间,因此我们可以指定它们的 32 位版本:

更容易处理缺失值


注意在引入 singleNone 值后,点如何自动从 int64 更改为 float64。

对于数据流来说,没有什么比错误的排版更糟糕的了,尤其是在以数据为中心的 AI 范式中。错误的排版直接影响数据准备决策,导致不同数据块之间的不兼容性,即使以静默方式传递,它们也可能损害某些输出无意义结果的操作。

写入时复制优化

Pandas 2.0 还添加了一种新的惰性复制机制,该机制会延迟复制数据帧和系列对象,直到它们被修改。

这意味着在启用写入时复制时,某些方法将返回视图而不是副本,这通过最大限度地减少不必要的数据重复来提高内存效率。

这也意味着在使用链式分配时需要格外小心。如果启用了写入时复制模式,则链式分配将不起作用,因为它们指向一个临时对象,该对象是索引操作的结果(在写入时复制下的行为类似于副本)。

Pandas 2.0 主要优势以及代码实现!的评论 (共 条)

分享到微博请遵守国家法律