🐻❄️ Polars
The one you choose — expressions instead of chained indexing, lazy evaluation with a real query optimiser, Arrow memory, larger-than-memory streaming, and an honest account of what moving off pandas costs.
No lessons published yet — this is the roadmap, so you can see exactly what the course will cover before it lands.
Before you start: Python for Data — Series 1. You need Python and some dataframe experience. Knowing pandas is not required, but if you do know it, Series 1 · 00 is about unlearning the index.
Short on time? The 14 episodes marked core are the shortest path to being productive at work. Start there and pick up the rest whenever a job asks for them.
Series 1 · Expressions
describing a computation instead of performing one
- 01
There Is No Index — What Changes When Alignment Stops Being Implicit
coreintermediatecoming soon - 02
Expressions and Contexts — pl.col() Does Nothing Until You Give It a Context
coreintermediatecoming soon - 03
when/then, over() and Namespaces — One Expression Across Many Columns
coreintermediatecoming soon - 04
dtypes, List and Struct — and One Null Instead of Three Kinds of Missing
coreintermediatecoming soon - 05
Joins and group_by — Semi, Anti, and Catching a Fan-Out With validate
coreintermediatecoming soon - 06
Project — Rewrite a Loop-Heavy Script as One Expression Pipeline
coreintermediate#projectcoming soon
Series 2 · Lazy Evaluation and the Optimiser
let the engine see the whole query first
- 01
scan Against read — Nothing Runs Until You Call collect()
coreadvancedcoming soon - 02
explain() — Predicate and Projection Pushdown, and Proving They Happened
coreadvancedcoming soon - 03
map_elements and Early collect() — The Two Ways to Blind the Optimiser
coreadvancedcoming soon - 04
Streaming — Larger Than Memory on One Machine, and Which Operations Support It
coreadvancedcoming soon - 05
IO and Arrow Interop — Handing Data to DuckDB Without Copying It
advancedcoming soon - 06
Project — A Lazy Pipeline Over a Folder of Parquet, With the Plan as Evidence
coreadvanced#projectcoming soon
Series 3 · In Practice
migrating, testing, and where it ends
- 01
Migrating From pandas — The Idioms Not to Translate
coreadvancedcoming soon - 02
Testing — assert_frame_equal, and Asserting the Row Count Rather Than Hoping
advancedcoming soon - 03
Polars SQL — When It Helps, and When DuckDB Is the Better Answer
advancedcoming soon - 04
Where Polars Ends — One Machine, a Smaller Ecosystem, and When to Stay Put
coreadvancedcoming soon - 05
Project — Port a pandas Job and Prove the Numbers Match
coreadvanced#projectcoming soon
Not here, on purpose
- Python itself and doing a data job end to end — covered in Python for Data
- pandas' own model — the index, copy against view, SettingWithCopyWarning — covered in pandas. Referenced here only where it explains what Polars deliberately does differently
- Distributed execution — covered in Apache Spark. Polars is a single-machine engine. In this course, Series 3 · 15 is honest about where that ends