数据类型
Polars内部使用Arrow数据类型。Arrow数据类型是Apache Arrow项目中的一部分,它定义了一种跨平台的、语言无关的数据格式。这种数据格式可以在不同的系统和语言之间进行高效的数据交换,而无需进行数据序列化和反序列化。Arrow datatypes包括了许多常见的数据类型,如整数、浮点数、字符串、日期和时间等。还支持复杂数据结构String,Categorical, and Object。方法
组 | 类型 | 备注 |
|---|---|---|
| 数字类型 | Int8 | 8-bit signed integer. |
| 数字类型 | Int16 | 16-bit signed integer. |
| 数字类型 | Int32 | 32-bit signed integer. |
| 数字类型 | Int64 | 64-bit signed integer. |
| 数字类型 | UInt8 | 8-bit unsigned integer. |
| 数字类型 | UInt16 | 16-bit unsigned integer. |
| 数字类型 | UInt32 | 32-bit unsigned integer. |
| 数字类型 | UInt64 | 64-bit unsigned integer. |
| 数字类型 | Float32 | 32-bit floating point. |
| 数字类型 | Float64 | 64-bit floating point. |
| 嵌套类型 | Struct | 一个Struct类型类似于 Vec<Series>可以用于将多列数据封装在一列中. |
| 嵌类型 | List | List类型底层是Arrow LargeList类型. |
| 时间类型 | Date | 日期类型,底层用i32类型储存自1970年1月1日00:00:00 UTC1 开始的天数。日期范围大约是从公元前5877641年到公元5877641年。 |
| 时间类型 | Datetime(TimeUnit, Option<PlSmallStr>) | 日期时间类型。第一个参数为单位,第二个参数为时区。通常定义为Datetime(TimeUnit::Milliseconds,None);底层用i64类型储存自1970年1月1日00:00:00 UTC 的毫秒。时间范围大约是从约公元前292,469,238年到公元后292,473,178年。在实际应用中,使用i64类型来存储毫秒级的时间戳是完全足够的。 |
| 时间类型 | Duration(TimeUnit) | 储存时间差. Duration(TimeUnit::Milliseconds) 是Date/Datetime减法运算的返回类型。 |
| 时间类型 | Time | 时间类型,内部储存了自一天0点开始的纳秒。 |
| 其他 | Boolean | 布尔值,内部用bit存储。 |
| 其他 | String | 字符串类型,底层是LargeUtf8 |
| 其他 | Binary | 任意二进制数据. |
| 其他 | Object | A limited supported data type that can be any value. |
| 其他 | Categorical | 分类变量。类似于R语言的因子化(factor)。crate feature dtype-categorical only |
详细Arrow类型说明,参见:https://arrow.apache.org/docs/format/Columnar.html
这一天(1970年1月1日00:00:00 UTC)被称作UNIX元年(UNIX epoch)
Float32和Float64遵守IEEE 754标准,但有以下需要注意:
Polars要求**操作不能依赖于0或 NaN的正负性,也不能保证NaN 值的有效载荷。**这不仅限于算术运算。排序和分组操作前会将所有零规范化为+0,将所有NaN规范化为没有有效载荷的正NaN,以进行有效的等式检查:NaN和NaN比较被认为相等。NaN比所有非NaN大。
在IEEE 754浮点数标准中,0和NaN(非数字)是有符号的,这意味着存在+0和-0,正NaN和负NaN。正零和负零在数值上是相等的,但是在某些计算中,如除法或者函数的极限,正零和负零可能会有不同的行为。在IEEE浮点数标准中,NaN(非数字)的二进制表示,有一个"有效载荷"(payload)部分。他指的是除符号位和指数位之外的部分。这个部分可以存储额外的信息。例如,如果一个数学运算的结果是未定义的,那么可以在NaN的有效载荷中存储这个信息。然而,大多数情况下,这个有效载荷并没有被使用,所以在许多操作中,对NaN的有效载荷的处理并没有明确的规定。