强制类型转换会将列的底层数据类型转换为新的数据类型。通过cast
函数实现,该函数包含一个参数strict
, 用于确定Polars在遇到无法从源数据类型转换为目标数据类型的值时的行为。默认为strict=True
, 这意味着 Polars 将抛出一个错误,通知用户转换失败,同时提供无法转换的值的详细信息。如果 strict=False
,则任何无法转换为目标数据类型的值都将被静默转换为null。
简单总结就是:默认情况下进行不同类型间的强制转换,如果存在无法强转的情况就会直接报错(例如字符串转数字时,字符串中包含字母)。但是Polars提供了一个strict
参数,它的本质作用就是遇到无法强转的情况时,是否直接进行报错,如果不报错,那么就会将那些不能强转的值置为null。
另外还需要注意一个点:在向下转换时,特别需要注意是否会存在溢出的情况!
在向下转换,在一定程度上可以减少内存占用。
下面代码将i64类型的数据转换为f32, 将f64转换为i32, 需要注意浮点数转换为整数时丢失精度:
可以通过更改与数值数据类型关联的精度来减少列的内存占用。以下代码演示了如何使用从Int64
到Int16
和从Float64
到Float32
的转换来降低内存使用量:
表示数字的字符串可以通过强制类型转换转换为相应的数据类型。反向转换也是可行的:
如果列包含非数字值或者格式错误, Polars会抛出错误并给出详细的错误信息, 可以设置strict=False
绕过错误获取null值。
数值转换为布尔类型时, 0转换为false, 非0转换为true
布尔转换为数值类型时, true转换为1, false转换为0
所有日期数据类型的数据在内部都表示为: 从参考时间(纪元)到现在所经过的时间单位数, Unix纪元: 1970 年 1 月 1 日 00:00:00 UTC
。
Date
: 存储自纪元以来的天数Datetime
: 存储自纪元以来的毫秒数(ms
)Time
: 时间单位是纳秒(ns
)Polars允许在数字类型和日期数据类型之间进行转换:
日期类型转换为字符串: .dt.to_string()
字符串转换为日期类型: .str.to_datetime()
str.to_datetime
具有支持时区功能的其他选项, 更多信息可以参考官方API文档