注册 登录

清河洛

polars简介及数据类型

qingheluo2024-07-26清河洛393
Polars是一个基于Rust语言开发的高性能数据处理和分析库,它的设计哲学主要围绕着性能优化、内存效率和易用性展开,旨在为Python开发人员提供可扩展且高效的数据处理框架,是非常流行的pandas库的替代品Polars的主要优势 性能与内存效率:利用Rust的高性能特性,如零成本抽象和系统级内存管理,实现了数据处理的高速执行和低内存占用。能够在保持快速响应的同时,处理比其自身内存更大的数据集 易用性:Polars提供了友好的API接口,尽量与pandas的接口兼容,使其易于学习和使用,让用户快速适应Polars并利用他们现有的知识 懒惰计算:Polars采用了懒惰计算策略,涉及检...

Polars是一个基于Rust语言开发的高性能数据处理和分析库,它的设计哲学主要围绕着性能优化、内存效率和易用性展开,旨在为Python开发人员提供可扩展且高效的数据处理框架,是非常流行的pandas库的替代品

Polars的主要优势

性能与内存效率:利用Rust的高性能特性,如零成本抽象和系统级内存管理,实现了数据处理的高速执行和低内存占用。能够在保持快速响应的同时,处理比其自身内存更大的数据集

易用性:Polars提供了友好的API接口,尽量与pandas的接口兼容,使其易于学习和使用,让用户快速适应Polars并利用他们现有的知识

懒惰计算:Polars采用了懒惰计算策略,涉及检查和优化查询以提高其性能并最大限度地减少内存消耗,进一步提高处理效率

并行计算:Polars内建支持并行计算,能够自动利用多核处理器来加速数据处理任务,大大缩短了数据处理的时间

polars官网网站:https://github.com/pola-rs/polars

polars的安装:pip install polars

polars中的数据类型

数字相关

Decimal :使用最高128位十进制表示的小数,具有可选精度和小数位数
    由于以十进制形式表示数值,避免了浮点数的舍入问题,用于高精度小数计算,如金融计算
    计算速度可能较慢,因为需要更复杂的算法来维持精度
    内存使用可能更高,取决于实现和所需精度

Float32
Float64

Int8
Int16
Int32
Int64

UInt8
UInt16
UInt32
UInt64

时间相关

Date :日期
Time :时间
Datetime:日期和时间

Duration:时间段

复合类型

Array(inner[, shape, width]) :固定长度列表

List(inner) :可变长度列表

Struct(fields)  结构类型

字符串相关

String:UTF-8编码字符串,每个字符串都是独立存储的,即使多个条目包含相同的文本
    适用于唯一值较多的字段,例如姓名、文本内容等
    由于直接存储文本,处理时通常占用更多内存,并且某些操作可能比Categorical类型慢
    但是在某些文本操作上String更加灵活,如文本拼接或复杂的搜索和替换操作,因为Categorical基于索引进行处理

Categorical:一组字符串的分类编码
    使用两部分来存储数据:内部的整数索引和字符串列表
    每个实际的字符串值都映射到这个列表中的一个索引
    特别适合具有重复值的数据列,如性别、国家、产品类别等。可以显著减少内存使用,并提高数据处理速度
    在进行分组、排序等操作时性能较好,因为这些操作基于整数索引进行,比字符串比较要快得多

Enum:一组字符串的固定集合分类编码
    类似于Categorical,但用于唯一值固定的数据中,如星期几
    性能上相较于Categorical更优

Utf8:String的别名

其他类型

Binary

Boolean

Null:空值

Object:用于包装任意Python对象的数据类型

Unknown:表示无法静态确定的值的类型

polars中的主要数据结构

Series:表示一组拥有相同数据类型的数据

DataFrame:一个二维表格型的数据结构,可以将其视为一个电子表格或SQL表

通常由以下几个部分组成:

数据:存储在行和列中,可以是不同类型的数据
列名:用于标识和访问特定列
索引:用于快速定位和访问行数据

一个DataFrame中每一列可以视为一个Series,每一行也可以视为一个Series

但是在polars中,数据是以列的形式存储的,所以在获取列时性能更好

DataFrame数据可以通过DataFrame.lazy()方法转换为LazyFrame数据

LazyFrame :一个惰性的DataFrame

当对一个LazyFrame进行筛选、排序、聚合等操作时,不会立即执行这些操作,而是被转换成一个执行计划

实际的执行操作只有在需要显示结果(如打印、保存到文件)或显式调用执行函数(如collect())时才会发生

LazyFrame数据在执行LazyFrame.collect()后返回的数据为DataFrame数据

LazyFrame 的优势

性能优化:由于操作是延迟执行的,polars可以在执行之前优化整个处理流程,减少不必要的数据加载和计算。
内存管理:因为只在必要时才加载和处理数据,可以更有效地管理内存使用。
自动优化:用户不需要手动优化,polars会自动进行优化,包括选择最有效的数据处理路径

LazyFrame非常适合用于大数据集的处理,尤其是在资源受限或需要高效数据处理的场景中。它可以显著提高数据处理任务的性能和效率



网址导航