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