数据类型转换

Series底层类型转换

#![allow(unused)]
fn main() {
Series::cast(&self, dtype: &DataType) -> Result<Series, PolarsError>
}

表达式执行类型转换

数值类型相互转换

不同容量的数值类型相互转换可能会遇到溢出问题。默认会抛出错误。

#![allow(unused)]
fn main() {
col("integers").cast(DataType::Boolean).alias("i2bool")//数值 to bool,0值为flase,非零为true
col("floats").cast(DataType::Boolean).alias("f2bool")//数值 tobool,0值为flase,非零为true。允许bool和数值的互相转换。但不允许从字符串转型为bool。
}

字符串转换为值

#![allow(unused)]
fn main() {
col("floats_as_string").cast(DataType::Float64)
//通过转型运算将字符串转换为数值,如果出现非数字,会抛出运行时错误。
}

值转换为字符串

#![allow(unused)]
fn main() {
col("integers").cast(DataType::String)
col("float").cast(DataType::String)
}

字符串解析为日期时间

#![allow(unused)]
fn main() {
let mut opt = StrptimeOptions::default();
opt.format=Some("%Y-%m-%d %H:%M:%S".to_owned());//默认值为None,polars默认可以识别标准日期时间形如:"2024-09-20 00:44:00+08:00",时区可省略。本行可以省略。
col("datetimestr").str().to_datetime(None,None,opt,lit("raise"))
}

to_datatime参数分别为 单位 时区 解析参数 歧义处理。世界上很多地区使用夏令时,夏令时开启时,会将本地时间向未来拨动1小时,夏令时结束时再拨回来。向未来拨动1小时会导致某个时段不存在,拨回来时会让某个时段出现两次。当某个时间值出现在不应该存在的时段,就是歧义处理参数发挥作用的时候,设为lit("raise"),出现歧义时间时报错。 一个重要经验是日期时间的存储必须包含时区,比如 "2024-09-20 0:44:00**+08:00**",有了时区信息才能正确表示时间。在省略时区的情况下,默认为UTC时间。这种正确不只是本地区,数据传到全球各地都能被正确运算和比较。

日期时间转换为字符串

#![allow(unused)]
fn main() {
col("datetime").dt().to_string("日期%Y-%m-%d,时间%H:%M:%S")
}