Published December 8, 2025
| Version py-1.36.0
Software
Open
pola-rs/polars: Python Polars 1.36.0
Authors/Creators
- Ritchie Vink
- Stijn de Gooijer
- Alexander Beedie
- Gijs Burghoorn1
- nameexhaustion
- Orson Peters2
- Marco Edward Gorelli3
- reswqa
- Jeroen van Zundert
- Marshall
- Gert Hulselmans4
- Cory Grinstead
- Koen Denecker
- Luke Manley
- chielP
- Itamar Turner-Trauring
- Kuba Valtar2
- Lawrence Mitchell
- Amber Sprenkels5
- Karl Genockey
- eitsupi
- Henry Harbeck
- Robin
- Kevin Patyk6
- Matteo Santamaria7
- Oliver Borchert8
- deanm0000
- DaniΓ«l Heres9
- Josh Magarick
- 1. PhD Candidate, Radboud University
- 2. Polars
- 3. Quansight
- 4. @aertslab
- 5. @pola-rs
- 6. Paula's Choice
- 7. University of California, Berkeley
- 8. @Quantco
- 9. @coralogix
Description
π Highlights
- Add Extension types (#25322)
π Performance improvements
- New single file IO sink pipeline enabled for sink_parquet (#25670)
- New partitioned IO sink pipeline enabled for sink_parquet (#25629)
- Correct overly eager local predicate insertion for unpivot (#25644)
- Reduce HuggingFace API calls (#25521)
- Use strong hash instead of traversal for CSPE equality (#25537)
- Fix panic in is_between support in streaming Parquet predicate push down (#25476)
- Faster kernels for rle_lengths (#25448)
- Allow detecting plan sortedness in more cases (#25408)
- Enable predicate expressions on unsigned integers (#25416)
- Mark output of more non-order-maintaining ops as unordered (#25419)
- Fast find start window in
group_by_dynamicwith largeoffset(#25376) - Add streaming native
LazyFrame.group_by_dynamic(#25342) - Add streaming sorted Group-By (#25013)
- Add parquet prefiltering for string regexes (#25381)
- Use fast path for
agg_min/agg_maxwhen nulls present (#25374) - Fuse positive
sliceinto streamingLazyFrame.rolling(#25338) - Mark
Expr.reshape((-1,))as row separable (#25326) - Use bitmap instead of Vec<bool> in first/last w. skip_nulls (#25318)
- Return references from
aexpr_to_leaf_names_iter(#25319)
β¨ Enhancements
- Add
bin.slice(),bin.head(), andbin.tail()methods (#25647) - Add SQL support for the
QUALIFYclause (#25652) - New partitioned IO sink pipeline enabled for sink_parquet (#25629)
- Add SQL syntax support for
CROSS JOIN UNNEST(col)(#25623) - Add
showmethods for DataFrame and LazyFrame (#19634) - Allow pl.Object in pivot value (#25533)
- Extend SQL
UNNESTsupport to handle multiple array expressions (#25418) - Minor improvement for
as_structrepr (#25529) - Temporal
quantilein rolling context (#25479) - Add support for
Float16dtype (#25185) - Add strict parameter to pl.concat(how='horizontal') (#25452)
- Add leftmost option to
str.replace_many / str.find_many / str.extract_many(#25398) - Add
quantilefor missing temporals (#25464) - Expose and document pl.Categories (#25443)
- Support decimals in search_sorted (#25450)
- Add SQL support for named
WINDOWreferences (#25400) - Add Extension types (#25322)
- Add
havingtogroup_bycontext (#23550) - Allow elementwise
Expr.overin aggregation context (#25402) - Add SQL support for
ROW_NUMBER,RANK, andDENSE_RANKfunctions (#25409) - Automatically Parquet dictionary encode floats (#25387)
- Add
empty_as_nullandkeep_nullsto{Lazy,Data}Frame.explode(#25369) - Allow
hashfor allListdtypes (#25372) - Support
unique_countsfor all datatypes (#25379) - Add
maintain_ordertoExpr.mode(#25377) - Display function of streaming physical plan
mapnode (#25368) - Allow
sliceon scalar in aggregation context (#25358) - Allow
implodeand aggregation in aggregation context (#25357) - Add
empty_as_nullandkeep_nullsflags toExpr.explode(#25289) - Add
ignore_nullstofirst/last(#25105) - Allow
Expr.uniqueonList/Arraywith non-numeric types (#25285) - Allow
Expr.rollingin aggregation contexts (#25258) - Allow bare
.row()on a single-row DataFrame, equivalent to.item()on a single-element DataFrame (#25229) - Raise suitable error on non-integer "n" value for
clear(#25266) - Support additional forms of SQL
CREATE TABLEstatements (#25191) - Add
LazyFrame.pivot(#25016)
π Bug fixes
- Rechunk on nested dtypes in
take_unchecked_implparallel path (#25662) - New single file IO sink pipeline enabled for sink_parquet (#25670)
- Fix streaming
SchemaMismatchpanic onlist.drop_nulls(#25661) - Correct overly eager local predicate insertion for unpivot (#25644)
- Address potential "batch_size" parameter collision in
scan_pyarrow_dataset(#25654) - Fix "dtype is unknown" panic in cross joins with literals (#25658)
- Fix "unreachable code" panic in UDF dtype inference (#25655)
- Fix panic on Boolean
rolling_sumcalculation for list or array eval (#25660) - Fix
panicedge-case when scanning hive partitioned data (#25656) - Fix lifetime for
AmortSerieslazy group iterator (#25620) - Improve SQL
GROUP BYandORDER BYexpression resolution, handling aliasing edge-cases (#25637) - Fix empty format handling (#25638)
- Prevent false positives in is_in for large integers (#25608)
- Differentiate between empty list an no list for unpivot (#25597)
- Properly resolve
HAVINGclause during SQLGROUP BYoperations (#25615) - Fix spearman panicking on nulls (#25619)
- Make sum on strings error in group_by context (#25456)
- Hang in multi-chunk DataFrame .rows() (#25582)
- Bug in boolean unique_counts (#25587)
- Set
Float16parquet schema type toFloat16(#25578) - Correct arr_to_any_value for object arrays (#25581)
- Have
PySeries::new_f16receivepf16s instead off32s (#25579) - Fix occurence of exact matches of
.join_asof(strategy="nearest", allow_exact_matches=False, ...)(#25506) - Fix incorrect
.list.evalafter slicing operations (#25540) - Reduce HuggingFace API calls (#25521)
- Strict conversion AnyValue to Struct (#25536)
- Fix panic in is_between support in streaming Parquet predicate push down (#25476)
- Always respect return_dtype in map_elements and map_rows (#25504)
- Rolling
mean/medianfor temporals (#25512) - Add
.rolling_rank()support for temporal types andpl.Boolean(#25509) - Fix dictionary replacement error in
write_ipc()(#25497) - Fix group lengths check in
sort_bywithAggregatedScalar(#25503) - Fix expr slice pushdown causing shape error on literals (#25485)
- Allow empty list in
sort_byinlist.evalcontext (#25481) - Prevent panic when joining sorted LazyFrame with itself (#25453)
- Validate list.slice parameters are not lists (#25458)
- Apply CSV dict overrides by name only (#25436)
- Incorrect result in aggregated
first/lastwithignore_nulls(#25414) - Fix
arr.{eval,agg}in aggregation context (#25390) - Support
AggregatedListinlist.{eval,agg}context (#25385) - Improve SQL
UNNESTbehaviour (#22546) - Remove
ClosableFile(#25330) - Resolve edge-case with SQL aggregates that have the same name as one of the
GROUP BYkeys (#25362) - Revert
pl.formatbehavior with nulls (#25370) - Remove
Exprcasts inpl.litinvocations (#25373) - Nested dtypes in streaming
first_non_null/last_non_null(#25375) - Correct
eq_missingfor struct with nulls (#25363) - Unique on literal in aggregation context (#25359)
- Allow
implodeand aggregation in aggregation context (#25357) - Aggregation with
drop_nullson literal (#25356) - Address multiple issues with SQL
OVERclause behaviour for window functions (#25249) - Bugs in
pl.from_reprwith signed exponential floats and line wrapping (#25331) - Schema mismatch with
list.agg,uniqueand scalar (#25348) - Correct
drop_itemsfor scalar input (#25351) - SQL
NATURALjoins should coalesce the key columns (#25353) - Mark
{forward,backward}_fillaslength_preserving(#25352) - Nested dtypes in streaming
first/last(#25298) - Fix link errors reported by
markdown-link-check(#25314) - Parquet
is_infor mixed validity pages (#25313) - Fix length preserving check for
evalexpressions in streaming engine (#25294) - Don't quietly allow unsupported SQL
SELECTclauses (#25282) - Reverse on chunked
struct(#25281) - Panic exception when calling
Expr.rollingin.over(#25283) - Run async DB queries with regular
asyncioif not inside a running loop (#25268) - Correct
{first,last}_non_nullif there are empty chunks (#25279) - Incorrect results for aggregated
{n_,}uniqueon bools (#25275) - Ensure out-of-range integers and other edge case values don't give wrong results for index_of() (#24369)
- Correctly prune projected columns in hints (#25250)
- Allow
Nulldtype values inscatter(#25245) - Correct handle requested stops in streaming shift (#25239)
- Make
str.json_decodeoutput deterministic with lists (#25240)
π Documentation
- Document schema parameter in meta methods (#25543)
- Correct link to
datetime_rangeinstead ofdate_rangein resampling page (#25532) - Explain aggregation & sorting of lists (#25260)
- Update
LazyFrame.collect_schema()docstring (#25508) - Remove lzo from parquet write options (#25522)
- Deprecate
Categoricalfunctions for lexical ordering and local checks (#25514) - Update on-premise documentation (#25489)
- Add
LazyFrame.pivotto reference guide (#25482) - Add docstring example showing
str.slicetaking Expression params (#25461) - Fix incorrect 'bitwise' in
any_horizontal/all_horizontaldocstring (#25469) - Add Extension and BaseExtension to doc index (#25444)
- Add polars-on-premise documentation (#25431)
- Add
havingAPI references (#25428) - Fix link errors reported by
markdown-link-check(#25314) - Update user guide for QueryProgress rename to QueryProfile (#25195)
π οΈ Other improvements
- Avoid rechunk requirement for Series.iter() (#25603)
- Use dtype for group_aware evaluation on
ApplyExpr(#25639) - Add "panic" and "streaming" tagging to
issue-labelerworkflow (#25657) - Fix rolling kernel dispatch with
monotonicgroup attribute (#25494) - Ensure we hash all attributes and visit all children in
traverse_and_hash_aexpr(#25627) - Ensure literal-only
SELECTbroadcast conforms to SQL semantics (#25633) - Rename polars-on-premise to polars-on-premises (#25617)
- Constrain new
issue-labelerworkflow to the Issue title (#25614) - Help categorise Issues by automatically applying labels (using the same patterns used for labelling PRs) (#25599)
- Add disk-cleaning step for Ubuntu runners (#25593)
- Show on streaming engine (#25589)
- Ignore a couple of unexplained typing errors (#25580)
- Skip existing files in pypi upload (#25576)
- Fix template path in release-python workflow (#25565)
- Skip rust integration tests for coverage in CI (#25558)
- Add
Finaltype-qualifier to module-level constants (#25556) - Add asserts and tests for
list.evalon multiple chunks with slicing (#25559) - Add
assert_sql_matchescoverage for SQLDISTINCTandDISTINCT ONsyntax (#25440) - Use strong hash instead of traversal for CSPE equality (#25537)
- Update partitioned sink IR (#25524)
- Print expected DSL schema hashes if mismatched (#25526)
- Fix --uv argument for benchmark-remote (#25513)
- Add
proptestDataFramestrategy (#25446) - Run
maturinwith--uvoption (#25490) - Fix feature gating TZ_AWARE_RE again (#25493)
- Add some cleanup (#25445)
- Test for
group_by(...).having(...)(#25430) - Remove aggregation context
Context(#25424) - Refactor sink IR (#25308)
- Remove
ClosableFile(#25330) - Remove debug file write from test suite (#25393)
- Add
ElementExprfor_evalexpressions (#25199) - Dispatch
Series.settozip_with_same_dtype(#25327) - Better coverage for
group_byaggregations (#25290) - Enable more streaming tests (#25364)
- Remove
Column::Partitioned(#25324) - Add toolchain file to runtimes for sdist (#25311)
- Remove
PyPartitioning(#25303) - Directly take
CloudSchemeinparse_cloud_options()(#25304) - Refactor
dt_rangefunctions (#25225) - Fix typo in CI release workflow (#25309)
- Use dedicated runtime packages from template (#25284)
- Simplify sink parameter passing from Python (#25302)
- Add test for unique with column subset (#25241)
- Fix Decimal precision annotation (#25227)
- Add
LazyFrame.pivot(#25016)
Thank you to all our contributors for making this release possible! @AndreaBozzo, @DannyStoll1, @EndPositive, @JakubValtar, @Jesse-Bakker, @Kevin-Patyk, @MarcoGorelli, @TNieuwdorp, @Voultapher, @alexander-beedie, @borchero, @c-peters, @cBournhonesque, @camriddell, @carnarez, @cmdlineluser, @coastalwhite, @cr7pt0gr4ph7, @davanstrien, @davidia, @dsprenkels, @etiennebacher, @feliblo, @guilhem-dvr, @itamarst, @jannickj, @jetuk, @kdn36, @lun3x, @marinegor, @mcrumiller, @nameexhaustion, @orlp, @pomo-mondreganto, @ritchie46, @vyasr and @wtn
Files
pola-rs/polars-py-1.36.0.zip
Files
(6.5 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:18bbc1df88208137c85f179c7fb1c15f
|
6.5 MB | Preview Download |
Additional details
Related works
- Is supplement to
- Software: https://github.com/pola-rs/polars/tree/py-1.36.0 (URL)
Software
- Repository URL
- https://github.com/pola-rs/polars