# Polars 1.35.0 — Python Polars 1.35.0 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2025-10-26 - Version: 1.35.0 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.35.0 - Permalink: https://whatsnew.fyi/product/polars/releases/1.35.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 Expr.item to strictly extract a single value from an expression - **added** — Add list.agg and arr.agg - **added** — Implement {Expr,Series}.rolling_rank() - **added** — Add arr.eval - **added** — Add union() function for unordered concatenation - **added** — Add name.replace to the set of column rename options - **added** — Add separator to {Data,Lazy}Frame.unnest - **added** — Add glob parameter to scan_ipc - **added** — Add environment variable to roundtrip empty struct in Parquet - **added** — Add streaming engine per-node metrics - **added** — Add support for UInt128 to pyo3-polars - **changed** — Stabilize decimal - **changed** — Support ewm_mean() in streaming engine - **changed** — Allow local scans on polars cloud (configurable) - **changed** — Support MergeSorted in CSPE - **changed** — Make Series init consistent with DataFrame init for string values declared with temporal dtype - **changed** — Improve rolling_(sum|mean) accuracy - **changed** — Allow duration strings with leading "+" - **changed** — Support np.ndarray -> AnyValue conversion - **fixed** — Fix incorrect join_asof on a casted expression ##### 🏆 Highlights - Stabilize decimal (#25020) ##### 🚀 Performance improvements - Bump foldhash to 0.2.0 and hashbrown to 0.16.0 (#25014) - Lower `unique` to native group-by and speed up `n_unique` in group-by context (#24976) - Better parallelize `take{_slice,}_unchecked` (#24980) - Implement native `skew` and `kurtosis` in group-by context (#24961) - Use native group-by aggregations for `bitwise_*` operations (#24935) - Address `group_by_dynamic` slowness in sparse data (#24916) - Push filters to PyIceberg (#24910) - Native `filter/drop_nulls/drop_nans` in group-by context (#24897) - Implement `cumulative_eval` using the group-by engine (#24889) - Prevent generation of copies of `Dataframe`s in `DslPlan` serialization (#24852) - Implement native `null_count`, `any` and `all` group-by aggregations (#24859) - Speed up `reverse` in group-by context (#24855) - Prune unused categorical values when exporting to arrow/parquet/IPC/pickle (#24829) - Don't check duplicates on streaming simple projection in release mode (#24830) - Lower approx\_n\_unique to the streaming engine (#24821) - Duration/interval string parsing optimisation (2-5x faster) (#24771) - Use native reducer for `first/last` on Decimals, Categoricals and Enums (#24786) - Implement indexed method for `BitMapIter::nth` (#24766) - Pushdown slices on plans within unions (#24735) ##### ✨ Enhancements - Stabilize decimal (#25020) - Support `ewm_mean()` in streaming engine (#25003) - Improve row-count estimates (#24996) - Remove filtered scan paths in IR when possible (#24974) - Introduce remote Polars MCP server (#24977) - Allow local scans on polars cloud (configurable) (#24962) - Add `Expr.item` to strictly extract a single value from an expression (#24888) - Add environment variable to roundtrip empty struct in Parquet (#24914) - Fast-count for `scan_iceberg().select(len())` (#24602) - Add `glob` parameter to `scan_ipc` (#24898) - Prevent generation of copies of `Dataframe`s in `DslPlan` serialization (#24852) - Add `list.agg` and `arr.agg` (#24790) - Implement `{Expr,Series}.rolling_rank()` (#24776) - Don't require PyArrow for `read_database_uri` if ADBC engine version supports PyCapsule interface (#24029) - Make `Series` init consistent with `DataFrame` init for string values declared with temporal dtype (#24785) - Support MergeSorted in CSPE (#24805) - Duration/interval string parsing optimisation (2-5x faster) (#24771) - Recursively apply CSPE (#24798) - Add streaming engine per-node metrics (#24788) - Add `arr.eval` (#24472) - Drop PyArrow requirement for non-batched usage of `read_database` with the ADBC engine and support `iter_batches` with the ADBC engine (#24180) - Improve rolling\_(sum|mean) accuracy (#24743) - Add `separator` to `{Data,Lazy}Frame.unnest` (#24716) - Add `union()` function for unordered concatenation (#24298) - Add `name.replace` to the set of column rename options (#17942) - Support `np.ndarray -> AnyValue` conversion (#24748) - Allow duration strings with leading "+" (#24737) - Drop now-unnecessary post-init "schema\_overrides" cast on `DataFrame` load from list of dicts (#24739) - Add support for UInt128 to pyo3-polars (#24731) ##### 🐞 Bug fixes - Re-enable CPU feature check before import (#25010) - Implement `read_excel` workaround for fastexcel/calamine issue loading a column subset from a named table (#25012) - Correctness `any(ignore_nulls)` and OOB in `all` (#25005) - Streaming any/all with ignore\_nulls=False (#25008) - Fix incorrect `join_asof` on a casted expression (#25006) - Optimize memory on rolling groups in `ApplyExpr` (#24709) - Fallback `Pyarrow` scan to in-memory engine (#24991) - Make `Operator::swap_operands` return correct operators for `Plus`, `Minus`, `Multiply` and `Divide` (#24997) - Capitalize letters after numbers in to\_titlecase (#24993) - Preserve null values in `pct_change` (#24952) - Raise length mismatch on `over` with sliced groups (#24887) - Check duplicate name in transpose (#24956) - Follow Kle _[Truncated at 4000 characters — full notes: https://github.com/pola-rs/polars/releases/tag/py-1.35.0]_