# Polars 1.41.1 — Python Polars 1.41.1 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2026-05-27 - Version: 1.41.1 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.41.1 - Permalink: https://whatsnew.fyi/product/polars/releases/1.41.1 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'. --- - **changed** — Improve performance of agg_n_unique with adaptive size dispatch to hashset or radix sort and capacity-aware reset - **added** — Allow deeper expressions - **fixed** — Raise length mismatch in multiple sort_by in group_by - **fixed** — Respect min_samples for rolling_by ops with nulls - **fixed** — Fix memory usage regression affecting TPCH Q22 - **added** — Add POLARS_ALLOW_NESTED_CSPE env var and make nested CSPE opt-in - **fixed** — Post-apply residual pyarrow predicates - **fixed** — Fix loss of precision for smaller floating types - **fixed** — Fix filter at scan dropped in CSPE filter pushdown - **fixed** — Fix portstate assertion error on is_in - **fixed** — Fix incorrect when/then after forward fill / reverse in groupby - **fixed** — Accept empty Thrift list encoded as bare 0x00 byte in parquet metadata - **fixed** — Stabilize object store credentialprovider cache key ##### 🚀 Performance improvements - Adaptive size dispatch to hashset or radix sort + capacity-aware reset in `agg_n_unique` (#27719) ##### ✨ Enhancements - Allow deeper expressions (#27768) ##### 🐞 Bug fixes - Raise length mismatch in multiple `sort_by` in `group_by` (#27772) - Respect min\_samples for rolling\_by ops with nulls (#27706) - Fix memory usage regression affecting TPCH Q22 (#27758) - Add `POLARS_ALLOW_NESTED_CSPE` env var and make nested CSPE opt-in (#27765) - Post-apply residual pyarrow predicates (#27764) - Fix loss of precision for smaller floating types(#27662) (#27732) - Filter at scan dropped in CSPE filter pushdown (#27763) - Fix portstate assertion error on is\_in (#27757) - Fix incorrect when/then after forward fill / reverse in groupby (#27745) - Accept empty Thrift list encoded as bare 0x00 byte in parquet metadata (#27754) - Stabilize object store `credentialprovider` cache key (#27712) - Add to `merge_sorted` docs that the input must be nulls first (#27743) ##### 📖 Documentation - Docs fixes (#27766) - Sync from Polars Cloud (#27751) - Add to `merge_sorted` docs that the input must be nulls first (#27743) ##### 🛠️ Other improvements - Attribute annotations for `CatalogCredentialProvider` (#27739) - Solve `type: ignore` in \_AioDataFrameResult (#27311) - Remove dead code in `_write_utils.py` (#27721) - Remove unnecessary ``not isinstance(v, DataType)`` check (#27723) Thank you to all our contributors for making this release possible! @EndPositive, @JakubValtar, @MarcoGorelli, @NicoOhR, @azimafroozeh, @carnarez, @dsprenkels, @jorenham, @kdn36, @nameexhaustion, @orlp and @ritchie46