数据类型转换
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") }