# Polars 1.31.0-beta.1 — Python Polars 1.31.0-beta.1 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2025-06-14 - Version: 1.31.0-beta.1 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.31.0-beta.1 - Permalink: https://whatsnew.fyi/product/polars/releases/1.31.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'. --- - **removed** — Remove old streaming engine - **deprecated** — Deprecate allow_missing_columns in scan_parquet in favor of missing_columns - **changed** — Move row index materialization in post-apply to occur after slicing - **added** — Add first_(true|false)_idx to BooleanChunked and use in bool arg_(min|max) - **changed** — Don't go through row encoding for most types on index_of - **changed** — Optimise low-level null scans and arg_max for bools when chunked - **added** — DataType expressions in Python - **added** — Native implementation for Iceberg positional deletes - **added** — Basic implementation of DataTypeExpr in Rust DSL - **added** — Add required: bool to ParquetFieldOverwrites - **added** — Support serializing name.map_fields - **added** — Support serializing Expr::RenameAlias - **added** — Add keys column in finish_callback - **added** — Add extra_columns parameter to scan_parquet - **added** — Add CORR function to polars SQL - **added** — Add per partition sort and finish callback to sinks - **changed** — Support descendingly-sorted values in search_sorted() - **added** — Derive DSL schema - **fixed** — Fix panic reading empty parquet with multiple boolean columns - **fixed** — Raise ComputeError instead of panicking in truncate when mixing month/week/day/sub-daily units - **fixed** — Materialize list.eval with unknown type ##### 💥 Breaking changes - Remove old streaming engine (#23103) ##### ⚠️ Deprecations - Deprecate `allow_missing_columns` in `scan_parquet` in favor of `missing_columns` (#22784) ##### 🚀 Performance improvements - Improve streaming groupby CSE (#23092) - Move row index materialization in post-apply to occur after slicing (#22995) - Add first\_(true|false)\_idx to BooleanChunked and use in bool arg\_(min|max) (#22907) - Don't go through row encoding for most types on `index_of` (#22903) - Optimise low-level `null` scans and `arg_max` for bools (when chunked) (#22897) - Optimize multiscan performance (#22886) ##### ✨ Enhancements - DataType expressions in Python (#23167) - Native implementation for Iceberg positional deletes (#23091) - Remove old streaming engine (#23103) - Basic implementation of `DataTypeExpr` in Rust DSL (#23049) - Add `required: bool` to `ParquetFieldOverwrites` (#23013) - Support serializing `name.map_fields` (#22997) - Support serializing `Expr::RenameAlias` (#22988) - Remove duplicate verbose logging from `FetchedCredentialsCache` (#22973) - Add `keys` column in `finish_callback` (#22968) - Add `extra_columns` parameter to `scan_parquet` (#22699) - Add CORR function to polars SQL (#22690) - Add per partition sort and finish callback to sinks (#22789) - Support descendingly-sorted values in search\_sorted() (#22825) - Derive DSL schema (#22866) ##### 🐞 Bug fixes - Fix panic reading empty parquet with multiple boolean columns (#23159) - Raise ComputeError instead of panicking in `truncate` when mixing month/week/day/sub-daily units (#23176) - Materialize `list.eval` with unknown type (#23186) - Only set sorting flag for 1st column with PQ SortingColumns (#23184) - Typo in AExprBuilder (#23171) - Null return from var/std on scalar column (#23158) - Support Datetime broadcast in `list.concat` (#23137) - Ensure projection pushdown maintains right table schema (#22603) - Add Null dtype support to arg\_sort\_by (#23107) - Raise error by default on invalid CSV quotes (#22876) - Fix group\_by mean and median returning all nulls for Decimal dtype (#23093) - Fix hive partition pruning not filtering out `__HIVE_DEFAULT_PARTITION__` (#23074) - Fix `AssertionError` when using `scan_delta()` on AWS with `storage_options` (#23076) - Fix deadlock on `collect(background=True)` / `collect_concurrently()` (#23075) - Incorrect null count in rolling\_min/max (#23073) - Preserve `file://` in LazyFrame node traverser (#23072) - Respect column order in `register_io_source` schema (#23057) - Don't call unnest for objects implementing `__arrow_c_array__` (#23069) - Incorrect output when using `sort` with `group_by` and `cum_sum` (#23001) - Implement owned arithmetic for Int128 (#23055) - Do not schema-match structs with different field counts (#23018) - Fix confusing error message on duplicate row\_index (#23043) - Add `include_nulls` to `Agg::Count` CSE check (#23032) - View buffer exceeding 2^32 - 1 bytes in concatenate\_view (#23017) - Fix incorrect result selecting `pl.len()` from `scan_csv` with `skip_lines` (#22949) - Allow for IO plugins with reordered columns in streaming (#22987) - Method `str.zfill` was inconsistent with Python and pandas when string contained leading '+' (#22985) - Integer underflow in `propagate_nulls` (#22986) - Setting `compat_level=0` for `sink_ipc` (#22960) - Narrow return type for `DataType.is_`, improve Pyright's type completeness from 69% to 95% (#22962) - Support arrow Decimal32 and Decimal64 types (#22954) - Guard against dictionaries being passed to projection keywords (#22928) - Update arrow format (#22941) - Fix filter pushdown to IO plugins (#22910) - Improve numeric stability rolling\_mean\ (#22944) - Guard against invalid nested objects in 'map\_elements' (#22932) - Allow subclasses in type equality checking (#22915) - Return early in `pl.Expr.__array_ufunc__` when only single input (#22913) - Add inline implodes in type coercion (#22885) - Add {top, bottom}\_k\_by to Ser _[Truncated at 4000 characters — full notes: https://github.com/pola-rs/polars/releases/tag/py-1.31.0-beta.1]_