pythonintermediate

Polars Lazy Query — Fast DataFrame Processing

Use Polars lazy evaluation for high-performance data transformations that outperform pandas.

python
import polars as pl


# Lazy evaluation — query optimizer runs before execution
df = (
    pl.scan_csv("sales.csv")
    .filter(pl.col("amount") > 100)
    .with_columns(
        pl.col("date").str.to_date("%Y-%m-%d"),
        (pl.col("amount") * pl.col("quantity")).alias("total"),
    )
    .group_by("region", "product")
    .agg(
        pl.col("total").sum().alias("revenue"),
        pl.col("total").mean().alias("avg_order"),
        pl.len().alias("order_count"),
    )
    .sort("revenue", descending=True)
    .collect()  # execute the optimized query plan
)

print(df)

# Join two datasets lazily
customers = pl.scan_parquet("customers.parquet")
orders = pl.scan_parquet("orders.parquet")

result = (
    orders
    .join(customers, on="customer_id", how="left")
    .group_by("country")
    .agg(
        pl.col("amount").sum().alias("total_revenue"),
        pl.n_unique("customer_id").alias("unique_customers"),
    )
    .filter(pl.col("total_revenue") > 10_000)
    .sort("total_revenue", descending=True)
    .collect()
)

# Window functions
df = df.with_columns(
    pl.col("revenue")
    .rank(descending=True)
    .over("region")
    .alias("rank_in_region")
)

Use Cases

  • High-performance data processing replacing pandas
  • Query optimization with lazy evaluation
  • Aggregating large datasets with minimal memory

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.