# Polars 1.36.0 — Python Polars 1.36.0 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2025-12-08 - Version: 1.36.0 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.36.0 - Permalink: https://whatsnew.fyi/product/polars/releases/1.36.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 Extension types - **added** — Add SQL support for the QUALIFY clause - **added** — Add bin.slice(), bin.head(), and bin.tail() methods - **added** — Add SQL syntax support for CROSS JOIN UNNEST(col) - **added** — Add separate env var to log tracked metrics - **added** — Expose fields for generating physical plan visualization data - **added** — Add quantile for missing temporals - **added** — Add strict parameter to pl.concat(how='horizontal') - **added** — Support decimals in search_sorted - **added** — Expose and document pl.Categories - **added** — Extend SQL UNNEST support to handle multiple array expressions - **added** — Add SQL support for ROW_NUMBER, RANK, and DENSE_RANK functions - **added** — Add SQL support for named WINDOW references - **added** — Add leftmost option to str.replace_many / str.find_many / str.extract_many - **added** — Add maintain_order to Expr.mode - **added** — Add empty_as_null and keep_nulls to {Lazy,Data}Frame.explode - **added** — Add empty_as_null and keep_nulls flags to Expr.explode - **added** — Support additional forms of SQL CREATE TABLE statements - **added** — Add support for Float16 dtype - **added** — Add unstable Schema.to_arrow() - **changed** — Allow pl.Object in pivot value - **changed** — Temporal quantile in rolling context - **changed** — Allow elementwise Expr.over in aggregation context - **changed** — Automatically Parquet dictionary encode floats - **changed** — Support unique_counts for all datatypes - **changed** — Allow hash for all List dtypes - **changed** — Allow slice on scalar in aggregation context - **changed** — Allow implode and aggregation in aggregation context - **changed** — Move GraphMetrics into StreamingQuery - **changed** — Allow Expr.unique on List/Array with non-numeric types - **changed** — Allow Expr.rolling in aggregation contexts - **changed** — Allow bare .row() on a single-row DataFrame, equivalent to .item() on a single-element DataFrame - **changed** — Support column-positional SQL UNION operations - **changed** — Make DSL-hash skippable - **changed** — Support arbitrary expressions in SQL JOIN constraints - **changed** — Allow arbitrary expressions as the Expr.rolling index_column - **changed** — Support ewm_var/std in streaming engine - **changed** — Add ignore_nulls to first / last - **changed** — Allow arbitrary Expressions in subset parameter of unique frame method - **changed** — Streaming {Expr,LazyFrame}.rolling - **added** — Add LazyFrame.pivot - **added** — Add SQL support for LEAD and LAG functions - **added** — Add having to group_by context - **added** — Add show methods for DataFrame and LazyFrame - **fixed** — Fix streaming SchemaMismatch panic on list.drop_nulls - **fixed** — Fix panic on Boolean rolling_sum calculation for list or array eval - **fixed** — Fix panic edge-case when scanning hive partitioned data - **fixed** — Fix empty format handling - **fixed** — Improve SQL GROUP BY and ORDER BY expression resolution, handling aliasing edge-cases - **fixed** — Preserve List inner dtype during chunked take operations - **fixed** — Fix spearman panicking on nulls - **fixed** — Properly resolve HAVING clause during SQL GROUP BY operations - **fixed** — Prevent false positives in is_in for large integers - **fixed** — Differentiate between empty list and no list for unpivot - **fixed** — Bug in boolean unique_counts - **fixed** — Hang in multi-chunk DataFrame .rows() 🏆 Highlights - Add Extension types (#25322) ##### ✨ Enhancements - Add SQL support for the QUALIFY clause (#25652) - Add bin.slice(), bin.head(), and bin.tail() methods (#25647) - Add SQL syntax support for CROSS JOIN UNNEST(col) (#25623) - Add separate env var to log tracked metrics (#25586) - Expose fields for generating physical plan visualization data (#25562) - Allow pl.Object in pivot value (#25533) - Minor improvement for as_struct repr (#25529) - Temporal quantile in rolling context (#25479) - Add quantile for missing temporals (#25464) - Add strict parameter to pl.concat(how='horizontal') (#25452) - Support decimals in search_sorted (#25450) - Expose and document pl.Categories (#25443) - Use reference to Graph pipes when flushing metrics (#25442) - Extend SQL UNNEST support to handle multiple array expressions (#25418) - Add SQL support for ROW_NUMBER, RANK, and DENSE_RANK functions (#25409) - Allow elementwise Expr.over in aggregation context (#25402) - Add SQL support for named WINDOW references (#25400) - Add leftmost option to str.replace_many / str.find_many / str.extract_many (#25398) - Automatically Parquet dictionary encode floats (#25387) - Support unique_counts for all datatypes (#25379) - Add maintain_order to Expr.mode (#25377) - Allow hash for all List dtypes (#25372) - Add empty_as_null and keep_nulls to {Lazy,Data}Frame.explode (#25369) - Display function of streaming physical plan map node (#25368) - Allow slice on scalar in aggregation context (#25358) - Allow implode and aggregation in aggregation context (#25357) - Move GraphMetrics into StreamingQuery (#25310) - Documentation on Polars Cloud manifests (#25295) - Add empty_as_null and keep_nulls flags to Expr.explode (#25289) - Allow Expr.unique on List/Array with non-numeric types (#25285) - Raise suitable error on non-integer "n" value for clear (#25266) - Allow Expr.rolling in aggregation contexts (#25258) - Allow bare .row() on a single-row DataFrame, equivalent to .item() on a single-element DataFrame (#25229) - Support additional forms of SQL CREATE TABLE statements (#25191) - Add support for Float16 dtype (#25185) - Support column-positional SQL "UNION" operations (#25183) - Add unstable `Schema.to_arrow()` (#25149) - Make DSL-hash skippable (#25140) - Improve error message on unsupported SQL subquery comparisons (#25135) - Support arbitrary expressions in SQL `JOIN` constraints (#25132) - Allow arbitrary expressions as the `Expr.rolling` `index_column` (#25117) - Set polars/ user-agent (#25112) - Support `ewm_var/std` in streaming engine (#25109) - Rewrite `IR::Scan` to `IR::DataFrameScan` in `expand_datasets` when applicable (#25106) - Add ignore_nulls to first / last (#25105) - Allow arbitrary Expressions in "subset" parameter of `unique` frame method (#25099) - Add `BIT_NOT` support to the SQL interface (#25094) - Streaming `{Expr,LazyFrame}.rolling` (#25058) - Add LazyFrame.pivot (#25016) - Add SQL support for `LEAD` and `LAG` functions (#23956) - Add having to group_by context (#23550) - Add show methods for DataFrame and LazyFrame (#19634) ##### 🚀 Performance improvements - Set parallelization threshold in `take_unchecked_impl` (#25672) - New single file IO sink pipeline enabled for sink_parquet (#25670) - Correct overly eager local predicate insertion for unpivot (#25644) - New partitioned IO sink pipeline enabled for sink_parquet (#25629) - Use strong hash instead of traversal for CSPE equality (#25537) - Reduce HuggingFace API calls (#25521) - Fix panic in is_between support in streaming Parquet predicate push down (#25476) - Faster kernels for rle_lengths (#25448) - Mark output of more non-order-maintaining ops as unordered (#25419) - Enable predicate expressions on unsigned integers (#25416) - Allow detecting plan sortedness in more cases (#25408) - Add parquet prefiltering for string regexes (#25381) - Fast find start window in group_by_dynamic _[Truncated at 4000 characters — full notes: https://github.com/pola-rs/polars/releases/tag/py-1.36.0]_