# Polars 1.40.0 — Python Polars 1.40.0 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2026-04-18 - Version: 1.40.0 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.40.0 - Permalink: https://whatsnew.fyi/product/polars/releases/1.40.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Add streaming support for grouped AsOf join - **added** — Add `ignore_nulls` to `{list,arr}.{any,all}` - **added** — Add `is_unique` to list/array dtypes - **added** — Add `pl.merge_sorted` operating on multiple frames - **added** — Add native streaming `interpolate` - **changed** — Create IR slice from expr slice pushdown - **changed** — Avoid unnecessary rechunk when sorting already sorted DataFrame - **changed** — Lower basic over() to streaming primitives - **changed** — Lower `drop_{nulls,nans}` in streaming `group_by` aggregations - **changed** — Lower `entropy` to streaming reductions - **changed** — Streaming `strptime` with `format=None` - **changed** — Lower `skew` / `kurtosis` to streaming aggregations - **changed** — Post apply pyarrow filter in Polars' engine instead of pyarrow - **changed** — Optimize `drop_nulls().{first,last}()` to `{first,last}(ignore_nulls=True)` - **changed** — Always process pyarrow scan in batches - **changed** — Make `cut` output `Enum` and mark as elementwise - **changed** — Use delta stats for mixed hive and non-hive predicate pushdown - **changed** — Take into account size per row in join sampling - **changed** — Streaming is_first_distinct and unique(maintain_order=True) - **changed** — Streaming `cov` and `corr` ##### 🏆 Highlights - Add streaming support for grouped AsOf join (#27293) ##### ⚠️ Deprecations - Deprecate support for dataframe interchange protocol (#27214) ##### 🚀 Performance improvements - Create IR slice from expr slice pushdown (#27200) - Add streaming support for grouped AsOf join (#27293) - Avoid unnecessary rechunk when sorting already sorted DataFrame (#27264) - Lower basic over() to streaming primitives (#27303) - Lower `drop_{nulls,nans}` in streaming `group_by` aggregations (#27296) - Lower `entropy` to streaming reductions (#27174) - Add native streaming `interpolate` (#27185) - Streaming `strptime` with `format=None` (#27056) - Lower `skew` / `kurtosis` to streaming aggregations (#27176) - Post apply pyarrow filter in Polars' engine instead of pyarrow (#27192) - Optimize `drop_nulls().{first,last}()` to `{first,last}(ignore_nulls=True)` (#27187) - Always process pyarrow scan in batches (#27183) - Make `cut` output `Enum` and mark as elementwise (#27173) - Remove unused expression sorts (#27075) - Use delta stats for mixed hive and non-hive predicate pushdown (#27102) - Take into account size per row in join sampling (#27098) - Streaming is\_first\_distinct and unique(maintain\_order=True) (#27052) - Streaming `cov` and `corr` (#27008) - Add sorted unique node to streaming engine (#26990) - Ensure Expr.append is lowered in streaming engine (#27022) - Collapse consecutive Sort nodes (#26965) - Drop `maintain_order=True` requirement in `sink_delta` (#27007) ##### ✨ Enhancements - Add `ignore_nulls` to `{list,arr}.{any,all}` (#27186) - Lock-free memory manager with spill-to-disk and fully OOC multiplexer (#26774) - Add `is_unique` to list/array dtypes (#27290) - Streaming pyarrow datasets sources (#27230) - Add `pl.merge_sorted` operating on multiple frames (#27014) - Allow `group_by()` without key exprs (#27141) - Change default scan/read\_lines column name from "lines" to "line" (#27122) - Make unnest() effective on all columns by default (#27029) - Collapse consecutive Sort nodes (#26965) ##### 🐞 Bug fixes - Update `groups` to correct length for `Implode` (#27282) - Fix scan\_csv missing\_columns='insert' overwrote existing data with NULLs (#27297) - Raise on non-numeric inputs in `pl.int_ranges` (#27294) - Fix always-true filter conversion to Iceberg filter (#27119) - Do not skip nulls when enumerating over rows in grouped AsOf join (#27275) - Fix `pivot` dropping data for null `on` values (#27273) - Resolve multiple files deadlock in CSV async reader (#27073) - Widen decimal precision on sum aggregation (#27270) - Correct lf.remote type (#27261) - Default `LazyFrame.map_batches` to no optimizations (#27262) - Extend `StructEval` schema context in `StackOptimizer` (#27243) - Preserve nulls when casting from all-null `Series` to `Struct` (#27241) - Fix `scan_delta` filter on empty dataframe (#27244) - Prevent `DataFrame` creation panic on `list[struct]` with heterogenous types (#27217) - Named aggregation `__structify` was being ignored (#27148) - Skip `null` group entries when collecting AsOf-by groups (#27215) - Fix panic with empty order\_by in over expression (#27088) - Write field ID from `sink_parquet` (#27196) - Fix statistics for Null columns in Parquet (#27021) - Do not prune sort nodes containing slice with dyn predicate (#27140) - Correct grouped `Binary` `arg_min`/`arg_max` and `String` single-element arg indices (#27172) - Resolve multiple files deadlock in NDJSON async reader (#27204) - Overflow panic in interpolate nearest (#27205) - Using checked arithmetic in `int96_to_i64_ns` to prevent overflow panic (#27129) - Don't trigger csv fast count if predicate is pushed down (#27190) - Support all integer dtypes for Series index assignment (#27188) - Streaming sort by-expressions were lowered incorrectly (#27158) - Replace multiprocessing.dummy.Pool with ThreadPoolExecutor (#27175) - Reset IO metrics instead of consuming (#27156) - Output SVG if output\_path ends with '.svg' in show\_grap _[Truncated at 4000 characters — full notes: https://github.com/pola-rs/polars/releases/tag/py-1.40.0]_