# Polars 1.38.0 — Python Polars 1.38.0 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2026-02-04 - Version: 1.38.0 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.38.0 - Permalink: https://whatsnew.fyi/product/polars/releases/1.38.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'. --- - **deprecated** — Deprecate retries=n in favor of storage_options={"max_retries": n} - **changed** — Enable zero-copy object_store put upload for IPC sink - **changed** — Resolve file schema's and metadata concurrently - **changed** — Run elementwise CSEE for the streaming engine - **changed** — Disable morsel splitting for fast-count on streaming engine - **changed** — Implement streaming decompression for scan_ndjson and scan_lines - **changed** — Improve string slicing performance - **changed** — Refactor scan_delta to use python dataset interface - **changed** — Add dedicated kernel for group-by arg_max/arg_min - **added** — Add streaming merge-join - **changed** — Generalize Bitmap::new_zeroed opt for Buffer::zeroed - **changed** — Reduce fs stat calls in path expansion - **changed** — Lower streaming group_by n_unique to unique().len() - **fixed** — Avoid OOM for scan_ndjson and scan_lines if input is compressed and negative slice - **added** — Support anonymous agg in-mem - **added** — Add unstable arrow_schema parameter to sink_parquet - **added** — Allow quantile to compute multiple quantiles at once - **added** — Allow empty LazyFrame in LazyFrame.group_by(...).map_groups - **added** — Add scan_lines - **added** — Support regex in str.split - **added** — Add nulls support for all rolling_by operations ##### ⚠️ Deprecations - Deprecate `retries=n` in favor of `storage_options={"max_retries": n}` (#26155) ##### 🚀 Performance improvements - Enable zero-copy object\_store `put` upload for IPC sink (#26288) - Resolve file schema's and metadata concurrently (#26325) - Run elementwise CSEE for the streaming engine (#26278) - Disable morsel splitting for fast-count on streaming engine (#26245) - Implement streaming decompression for scan\_ndjson and scan\_lines (#26200) - Improve string slicing performance (#26206) - Refactor `scan_delta` to use python dataset interface (#26190) - Add dedicated kernel for group-by `arg_max/arg_min` (#26093) - Add streaming merge-join (#25964) - Generalize Bitmap::new\_zeroed opt for Buffer::zeroed (#26142) - Reduce fs stat calls in path expansion (#26173) - Lower streaming group\_by n\_unique to unique().len() (#26109) ##### ✨ Enhancements - Avoid OOM for scan\_ndjson and scan\_lines if input is compressed and negative slice (#26396) - Support annoymous agg in-mem (#26376) - Add unstable `arrow_schema` parameter to `sink_parquet` (#26323) - Improve error message formatting for structs (#26349) - Remove parquet field overwrites (#26236) - Enable zero-copy object\_store `put` upload for IPC sink (#26288) - Improved disambiguation for qualified wildcard columns in SQL projections (#26301) - Expose `upload_concurrency` through env var (#26263) - Allow quantile to compute multiple quantiles at once (#25516) - Allow empty LazyFrame in `LazyFrame.group_by(...).map_groups` (#26275) - Use delta file statistics for batch predicate pushdown (#26242) - Add streaming UnorderedUnion (#26240) - Implement compression support for sink\_ndjson (#26212) - Add unstable record batch statistics flags to `{sink/scan}_ipc` (#26254) - Support CSE for python UDFs on the same address (#26253) - Cloud retry/backoff configuration via `storage_options` (#26204) - Use same sort order for expanded paths across local / cloud / directory / glob (#26191) - Add streaming merge-join (#25964) - Serialize optimization flags for cloud plan (#26168) - Add compression support to write\_csv and sink\_csv (#26111) - Add `scan_lines` (#26112) - Support regex in `str.split` (#26060) - Add unstable IPC Statistics read/write to `scan_ipc`/`sink_ipc` (#26079) - Add unstable `height` parameter to `DataFrame`/`LazyFrame` (#26014) - Remove old partition sink API (#26100) - Expose ArrowStreamExportable on python collect batches iterator (#26074) - Add nulls support for all rolling\_by operations (#26081) ##### 🐞 Bug fixes - Correct off-by-one in RLE row counting for nullable dictionary-encoded columns (#26411) - Support very large integers in env var limits (#26399) - Fix PlPath panic from incorrect slicing of UTF8 boundaries (#26389) - Fix Float dtype for spearman correlation (#26392) - Fix optimizer panic in right joins with type coercion (#26365) - Don't serialize retry config from local environment vars (#26289) - Fix `PartitionBy` with scalar key expressions and `diff()` (#26370) - Add {Float16, Float32} -> Float32 lossless upcast (#26373) - Fix panic using `with_columns` and `collect_all` (#26366) - Add multi-page support for writing dictionary-encoded Parquet columns (#26360) - Ensure slice advancement when skipping non-inlinable values in `is_in` with inlinable needles (#26361) - Pin `xlsx2csv` version temporarily (#26352) - Bugs in ViewArray total\_bytes\_len (#26328) - Overflow in i128::abs in Decimal fits check (#26341) - Make Expr.hash on Categorical mapping-independent (#26340) - Clone shared GroupBy node before mutation in physical plan creation (#26327) - Fixed "sheet\_name" typing for `read_ods` and `read_excel` (#26317) - Improve Polars dtype inference from Python `Union` typing (#26303) - Consider the "current location" of an item when computing `rolling_rank_by` (#26287) - Reset `is_count_star` flag between queries in collect\_all (#26256) - Fix incorrect is\_between filter on scan\_parquet (#26284) - Make polars compatibl _[Truncated at 4000 characters — full notes: https://github.com/pola-rs/polars/releases/tag/py-1.38.0]_