Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/docs/source/src/rust/user-guide/expressions/missing-data.rs
7889 views
1
fn main() -> Result<(), Box<dyn std::error::Error>> {
2
// --8<-- [start:dataframe]
3
use polars::prelude::*;
4
let df = df! (
5
"value" => &[Some(1), None],
6
)?;
7
8
println!("{df}");
9
// --8<-- [end:dataframe]
10
11
// --8<-- [start:count]
12
let null_count_df = df.null_count();
13
println!("{null_count_df}");
14
// --8<-- [end:count]
15
16
// --8<-- [start:isnull]
17
let is_null_series = df.lazy().select([col("value").is_null()]).collect()?;
18
println!("{is_null_series}");
19
// --8<-- [end:isnull]
20
21
// --8<-- [start:dataframe2]
22
let df = df! (
23
"col1" => [0.5, 1.0, 1.5, 2.0, 2.5],
24
"col2" => [Some(1), None, Some(3), None, Some(5)],
25
)?;
26
27
println!("{df}");
28
// --8<-- [end:dataframe2]
29
30
// --8<-- [start:fill]
31
let fill_literal_df = df
32
.clone()
33
.lazy()
34
.with_column(col("col2").fill_null(3))
35
.collect()?;
36
37
println!("{fill_literal_df}");
38
// --8<-- [end:fill]
39
40
// --8<-- [start:fillstrategy]
41
42
let fill_literal_df = df
43
.clone()
44
.lazy()
45
.with_columns([
46
col("col2")
47
.fill_null_with_strategy(FillNullStrategy::Forward(None))
48
.alias("forward"),
49
col("col2")
50
.fill_null_with_strategy(FillNullStrategy::Backward(None))
51
.alias("backward"),
52
])
53
.collect()?;
54
55
println!("{fill_literal_df}");
56
// --8<-- [end:fillstrategy]
57
58
// --8<-- [start:fillexpr]
59
let fill_expression_df = df
60
.clone()
61
.lazy()
62
.with_column(col("col2").fill_null((lit(2) * col("col1")).cast(DataType::Int64)))
63
.collect()?;
64
65
println!("{fill_expression_df}");
66
// --8<-- [end:fillexpr]
67
68
// --8<-- [start:fillinterpolate]
69
let fill_interpolation_df = df
70
.lazy()
71
.with_column(col("col2").interpolate(InterpolationMethod::Linear))
72
.collect()?;
73
74
println!("{fill_interpolation_df}");
75
// --8<-- [end:fillinterpolate]
76
77
// --8<-- [start:nan]
78
let nan_df = df!(
79
"value" => [1.0, f64::NAN, f64::NAN, 3.0],
80
)?;
81
println!("{nan_df}");
82
// --8<-- [end:nan]
83
84
// --8<-- [start:nan-computed]
85
let df = df!(
86
"dividend" => [1.0, 0.0, -1.0],
87
"divisor" => [1.0, 0.0, -1.0],
88
)?;
89
90
let result = df
91
.lazy()
92
.select([col("dividend") / col("divisor")])
93
.collect()?;
94
95
println!("{result}");
96
// --8<-- [end:nan-computed]
97
98
// --8<-- [start:nanfill]
99
let mean_nan_df = nan_df
100
.lazy()
101
.with_column(col("value").fill_nan(Null {}.lit()).alias("replaced"))
102
.select([
103
col("*").mean().name().suffix("_mean"),
104
col("*").sum().name().suffix("_sum"),
105
])
106
.collect()?;
107
108
println!("{mean_nan_df}");
109
// --8<-- [end:nanfill]
110
Ok(())
111
}
112
113