Null和None和NaN

在polars内部缺失数据用Null表示,这是因为polars遵守Apache Arrow 项目的数据规范。在rust中Option::None用于表示缺失数据。因此Rust的None会被Polars储存为null。

#![allow(unused)]
fn main() {
let df = df! (
    "value" => &[Some(1), None],
)?;
println!("{}", &df);
}

The output:

shape: (2, 1)
┌───────┐
│ value │
│ ---   │
│ i64   │
╞═══════╡
│ 1     │
│ null  │
└───────┘

对于浮点数,也存在NaN(Not a Number),是特殊的一个数,他通常由错误的数学运算产生,NaN也是float类型的特殊值,它并不用来表示缺失。这意味着null_count()只计算null值,而不包括NaN值。fill_nan、fill_null分别用于填充nan和null值。

含义表达式返回值
零除以零0/0NaN
对负数开根号(-1f32).sqrt()NaN
无穷参与的部分运算
let inf=std::f32::INFINITY
inf*0
inf/inf
NaN
NaN参与的所有数学运算NaN+1
NaN*1
NaN