Things on this page are fragmentary and immature notes/thoughts of the author. Please read with your own judgement!
Tips and Traps¶
LazyFrame.filterfilters rows using anExprwhileDataFrame.filterfilters rows using a mask of the typeChunkedArray<BooleanType>.
:timing
:sccache 1
:dep polars = { version = "0.21.1", features = ["lazy", "parquet"] }sccache: true
use polars::prelude::*;
use polars::df;let frame = df![
"names" => ["a", "b", "c"],
"values" => [1, 2, 3],
"values_nulls" => [Some(1), None, Some(3)]
].unwrap();
frameshape: (3, 3)
┌───────┬────────┬──────────────┐
│ names ┆ values ┆ values_nulls │
│ --- ┆ --- ┆ --- │
│ str ┆ i32 ┆ i32 │
╞═══════╪════════╪══════════════╡
│ a ┆ 1 ┆ 1 │
├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ b ┆ 2 ┆ null │
├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ c ┆ 3 ┆ 3 │
└───────┴────────┴──────────────┘Convert the DataFrame to a lazy one
and then filter rows using an Expr.
frame.lazy().filter(
col("values").gt(lit::<i32>(1))
).collect()Ok(shape: (2, 3)
┌───────┬────────┬──────────────┐
│ names ┆ values ┆ values_nulls │
│ --- ┆ --- ┆ --- │
│ str ┆ i32 ┆ i32 │
╞═══════╪════════╪══════════════╡
│ b ┆ 2 ┆ null │
├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ c ┆ 3 ┆ 3 │
└───────┴────────┴──────────────┘)let frame = df![
"names" => ["a", "b", "c"],
"values" => [1, 2, 3],
"values_nulls" => [Some(1), None, Some(3)]
].unwrap();
let lframe = frame.lazy();
[lframe.fetch(2), lframe.fetch(2)][lframe.fetch(2), lframe.fetch(2)]
^^^^^^^^ `lframe` moved due to this method call
[lframe.fetch(2), lframe.fetch(2)]
^^^^^^ value used here after move
let lframe = frame.lazy();
^^^^^^ move occurs because `lframe` has type `LazyFrame`, which does not implement the `Copy` trait
use of moved value: `lframe`