Path: blob/main/docs/source/src/rust/user-guide/expressions/missing-data.rs
7889 views
fn main() -> Result<(), Box<dyn std::error::Error>> {1// --8<-- [start:dataframe]2use polars::prelude::*;3let df = df! (4"value" => &[Some(1), None],5)?;67println!("{df}");8// --8<-- [end:dataframe]910// --8<-- [start:count]11let null_count_df = df.null_count();12println!("{null_count_df}");13// --8<-- [end:count]1415// --8<-- [start:isnull]16let is_null_series = df.lazy().select([col("value").is_null()]).collect()?;17println!("{is_null_series}");18// --8<-- [end:isnull]1920// --8<-- [start:dataframe2]21let df = df! (22"col1" => [0.5, 1.0, 1.5, 2.0, 2.5],23"col2" => [Some(1), None, Some(3), None, Some(5)],24)?;2526println!("{df}");27// --8<-- [end:dataframe2]2829// --8<-- [start:fill]30let fill_literal_df = df31.clone()32.lazy()33.with_column(col("col2").fill_null(3))34.collect()?;3536println!("{fill_literal_df}");37// --8<-- [end:fill]3839// --8<-- [start:fillstrategy]4041let fill_literal_df = df42.clone()43.lazy()44.with_columns([45col("col2")46.fill_null_with_strategy(FillNullStrategy::Forward(None))47.alias("forward"),48col("col2")49.fill_null_with_strategy(FillNullStrategy::Backward(None))50.alias("backward"),51])52.collect()?;5354println!("{fill_literal_df}");55// --8<-- [end:fillstrategy]5657// --8<-- [start:fillexpr]58let fill_expression_df = df59.clone()60.lazy()61.with_column(col("col2").fill_null((lit(2) * col("col1")).cast(DataType::Int64)))62.collect()?;6364println!("{fill_expression_df}");65// --8<-- [end:fillexpr]6667// --8<-- [start:fillinterpolate]68let fill_interpolation_df = df69.lazy()70.with_column(col("col2").interpolate(InterpolationMethod::Linear))71.collect()?;7273println!("{fill_interpolation_df}");74// --8<-- [end:fillinterpolate]7576// --8<-- [start:nan]77let nan_df = df!(78"value" => [1.0, f64::NAN, f64::NAN, 3.0],79)?;80println!("{nan_df}");81// --8<-- [end:nan]8283// --8<-- [start:nan-computed]84let df = df!(85"dividend" => [1.0, 0.0, -1.0],86"divisor" => [1.0, 0.0, -1.0],87)?;8889let result = df90.lazy()91.select([col("dividend") / col("divisor")])92.collect()?;9394println!("{result}");95// --8<-- [end:nan-computed]9697// --8<-- [start:nanfill]98let mean_nan_df = nan_df99.lazy()100.with_column(col("value").fill_nan(Null {}.lit()).alias("replaced"))101.select([102col("*").mean().name().suffix("_mean"),103col("*").sum().name().suffix("_sum"),104])105.collect()?;106107println!("{mean_nan_df}");108// --8<-- [end:nanfill]109Ok(())110}111112113