# Polars 1.37.0 — Python Polars 1.37.0 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2026-01-10 - Version: 1.37.0 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.37.0 - Permalink: https://whatsnew.fyi/product/polars/releases/1.37.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 new pl.PartitionBy API - **added** — Add lazy collect_all - **added** — Add nulls support for rolling_mean_by - **added** — Expose record batch size in {sink,write}_ipc - **added** — Add null_on_oob parameter to expr.get - **added** — Support streaming IPC scan from S3 object store - **added** — Add pl.Expr.(min|max)_by - **added** — Add Series sql method for API consistency - **added** — Support Binary and Decimal in arg_(min|max) - **added** — Add missing Series.arr.mean - **changed** — Speed up SQL interface ORDER BY clauses - **changed** — Add fast kernel for is_nan and use it for numpy NaN->null conversion - **changed** — New streaming NDJSON sink pipeline - **changed** — New streaming CSV sink pipeline - **changed** — Replace ryu with faster zmij - **changed** — Use new sink pipeline for write/sink_ipc - **changed** — Improve handling of unqualified SQL JOIN columns that are ambiguous - **changed** — Drop Python 3.9 support - **fixed** — Make struct.with_fields data model coherent - **fixed** — Ensure chunk consistency in in-memory join ##### 🚀 Performance improvements - Speed up `SQL` interface "ORDER BY" clauses (#26037) - Add fast kernel for is\_nan and use it for numpy NaN->null conversion (#26034) - Optimize ArrayFromIter implementations for ObjectArray (#25712) - New streaming NDJSON sink pipeline (#25948) - New streaming CSV sink pipeline (#25900) - Dispatch partitioned usage of `sink_*` functions to new-streaming by default (#25910) - Replace ryu with faster zmij (#25885) - Reduce memory usage for .item() count in grouped first/last (#25787) - Skip schema inference if schema provided for `scan_csv/ndjson` (#25757) - Add width-aware chunking to prevent degradation with wide data (#25764) - Use new sink pipeline for write/sink\_ipc (#25746) - Reduce memory usage when scanning multiple parquet files in streaming (#25747) - Don't call cluster\_with\_columns optimization if not needed (#25724) ##### ✨ Enhancements - Add new `pl.PartitionBy` API (#26004) - ArrowStreamExportable and sink\_delta (#25994) - Release musl builds (#25894) - Implement streaming decompression for CSV `COUNT(*)` fast path (#25988) - Add nulls support for rolling\_mean\_by (#25917) - Add lazy `collect_all` (#25991) - Add streaming decompression for NDJSON schema inference (#25992) - Improved handling of unqualified SQL `JOIN` columns that are ambiguous (#25761) - Drop Python 3.9 support (#25984) - Expose record batch size in `{sink,write}_ipc` (#25958) - Add `null_on_oob` parameter to `expr.get` (#25957) - Suggest correct timezone if timezone validation fails (#25937) - Support streaming IPC scan from S3 object store (#25868) - Implement streaming CSV schema inference (#25911) - Support hashing of meta expressions (#25916) - Improve `SQLContext` recognition of possible table objects in the Python globals (#25749) - Add pl.Expr.(min|max)\_by (#25905) - Improve MemSlice Debug impl (#25913) - Implement or fix json encode/decode for (U)Int128, Categorical, Enum, Decimal (#25896) - Expand scatter to more dtypes (#25874) - Implement streaming CSV decompression (#25842) - Add Series `sql` method for API consistency (#25792) - Mark Polars as safe for free-threading (#25677) - Support Binary and Decimal in arg\_(min|max) (#25839) - Allow Decimal parsing in str.json\_decode (#25797) - Add `shift` support for Object data type (#25769) - Add missing `Series.arr.mean` (#25774) - Allow scientific notation when parsing Decimals (#25711) ##### 🐞 Bug fixes - Release GIL on collect\_batches (#26033) - Missing buffer update in String is\_in Parquet pushdown (#26019) - Make `struct.with_fields` data model coherent (#25610) - Incorrect output order for order sensitive operations after join\_asof (#25990) - Use SeriesExport for pyo3-polars FFI (#26000) - Add pl.Schema to type signature for DataFrame.cast (#25983) - Don't write Parquet min/max statistics for i128 (#25986) - Ensure chunk consistency in in-memory join (#25979) - Fix varying block metadata length in IPC reader (#25975) - Implement collect\_batches properly in Rust (#25918) - Fix panic on arithmetic with bools in list (#25898) - Convert to index type with strict cast in some places (#25912) - Empty dataframe in streaming non-strict hconcat (#25903) - Infer large u64 in json as i128 (#25904) - Set http client timeouts to 10 minutes (#25902) - Correct lexicographic ordering for Parquet BYTE\_ARRAY statistics (#25886) - Raise error on duplicate `group_by` names in `upsample()` (#25811) - Correctly export view buffer sizes nested in Extension types (#25853) - Fix `DataFrame.estimated_size` not handling overlapping chunks correctly (#25775) - Ensure Kahan sum does not introduce NaN from infinities (#25850) - Trim excess bytes in parquet decode (#25829) - Fix panic/deadlock sinking parquet with rows larger than 64MB estimated size (#25836) - Fix quantile `midpoint` interpolation (#25824) - Don't use cast when converting from physical in list.get (#25831) - Invalid null count on int -> categorical cast (#25816) - Update groups in `list.eval` ( _[Truncated at 4000 characters — full notes: https://github.com/pola-rs/polars/releases/tag/py-1.37.0]_