# Polars 1.35.0-beta.1 — Python Polars 1.35.0-beta.1 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2025-10-19 - Version: 1.35.0-beta.1 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.35.0-beta.1 - Permalink: https://whatsnew.fyi/product/polars/releases/1.35.0-beta.1 - Labels: Pre-release 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** — Address group_by_dynamic slowness in sparse data - **changed** — Push filters to PyIceberg - **changed** — Implement native filter/drop_nulls/drop_nans in group-by context - **changed** — Implement cumulative_eval using the group-by engine - **changed** — Prevent generation of copies of Dataframes in DslPlan serialization - **changed** — Implement native null_count, any and all group-by aggregations - **changed** — Speed up reverse in group-by context - **changed** — Prune unused categorical values when exporting to arrow/parquet/IPC/pickle - **changed** — Lower approx_n_unique to the streaming engine - **changed** — Duration/interval string parsing is 2-5x faster - **changed** — Use native reducer for first/last on Decimals, Categoricals and Enums - **added** — Add environment variable to roundtrip empty struct in Parquet - **added** — Add glob parameter to scan_ipc - **added** — Add list.agg and arr.agg - **added** — Implement {Expr,Series}.rolling_rank() - **added** — Add arr.eval - **added** — Add separator to {Data,Lazy}Frame.unnest - **added** — Add union() function for unordered concatenation - **added** — Add name.replace to the set of column rename options - **fixed** — Fix repeated with_row_index() after scan() silently ignored ##### 🚀 Performance improvements - 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 - 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 - Properly release the GIL for `read_parquet_metadata` (#24922) - Broadcast `partition_by` columns in `over` expression (#24874) - Clear index cache on stacked `df.filter` expressions (#24870) - Fix 'explode' mapping strategy on scalar value (#24861) - Fix repeated `with_row_index()` after `scan()` silently ignored (#24866) - Correctly return min and max for enums in groupby aggregation (#24808) - Refactor `BinaryExpr` in `group_by` dispatch logic (#24548) - Fix aggstate for `gather` (#24857) - Keep scalars for length preserving functions in `group_by` (#24819) - Have `range` feature depend on `dtype-array` feature (#24853) - Fix duplicate select panic (#24836) - Inconsistency of list.sum() result type with None values (#24476) - Division by zero in Expr.dt.truncate (#24832) - Potential deadlock in \_\_arrow\_c\_stream\_\_ (#24831) - Allow double aggregations in group-by contexts (#24823) - Series.shrink\_dtype for i128/u128 (#24833) - Fix dtype in `EvalExpr` (#24650) - Allow aggregations on `AggState::LiteralScalar` (#24820) - Dispatch to `group_aware` for fallible expressions with masked out elements (#24815) - Fix error for `arr.sum()` on small integer Array dtypes containing nulls (#24478) - Fix regression on `write_database()` to Snowflake due to unsupported string view type (#24622) - Fix XOR did not follow kleene when one side is unit-length (#24810) - Make `Series` init consistent with `DataFrame` init for string values declared with temporal dtype (#24785) - Incorrect precision in Series.str.to\_decimal (#24804) - Use `overl _[Truncated at 4000 characters — full notes: https://github.com/pola-rs/polars/releases/tag/py-1.35.0-beta.1]_