🏆 Highlights
⚠️ Deprecations
- Rename DataFrame column index methods (#12542)
- Rename
Series.set_at_idx
toscatter
(#12540) - Deprecate
Series.view
(#12539) - Rename cumulative functions
cumsum -> cum_sum
and similar (#12513) - Rename
take
togather
(#12528) - Add dedicated horizontal aggregation methods to
DataFrame
(#12492) - Rename
take_every
togather_every
(#12531) - Deprecate
Series.inner_dtype
property (#12494) - Deprecate
parse_int
in favor ofto_integer
(#12464) - Deprecate DataType method
is_not
(#12458) - Deprecate Series methods
is_boolean
andis_utf8
(#12457) - Add
DataType.is_integer
and other dtype groups (#12200)
🚀 Performance improvements
- speed up parquet download of streaming engine (#12544)
- speed up cov/corr with SIMD + strength-reduction
~3x 0.19.13/ ~2x numpy
(#12471) - apply predicates and statistics of parquet files in streaming mode (#12439)
- use online algorithm for cov/corr
~2x
(#12412) - make 1D numpy to polars conversion zero-copy for numeric data (#12403)
✨ Enhancements
- Add dedicated horizontal aggregation methods to
DataFrame
(#12492) - support http scan_parquet (#12517)
- Add support for UTF-8 BOM option in
write_csv
andsink_csv
(#12253) - remove lexical (replace with atoi_simd, ryu, and itao). (#12512)
- more changes for versioned plugins (#12504)
- plugins add version and context (#12433)
- Add
DataType.is_integer
and other dtype groups (#12200) - include i128 in more primitive functions (#12413)
- write rolling functions as private expressions. (#12379)
🐞 Bug fixes
- fix incorrect ternary agg states (#12538)
- fix and improve ternary evaluation on groups (#12529)
- saturating sub in debug msg (#12525)
- fix panic when writing
Decimal
type to parquet (#12532) - pre-fefetch struct columns in async projection pd (#12514)
- rechunk cross join output in streaming (#12511)
- Ensure behaviour of
Series
comparison withtimedelta
matches that of other types (#12497) - fix as_list logical types (#12507)
- fix streaming cross join on empty df (#12491)
- dont overflow when calculating date range over very long periods (#12479)
- Allow append/zip_with/extend on local categoricals (#12369)
- Do not panic if time is invalid (#12466)
- ensure explicit "return_dtype" is respected by
map_dicts
(#12436) - empty csv no-raise (#12434)
- Fix
scan_csv
error type (#12355) - binary operations in aggregation context on literals (#12430)
- raw HTML output alignment was incorrect for dtype in header (#12422)
- update groups state after binary aggregation (#12415)
- Remove extra
\n
when reading file-like object wi… (#12333) - Issue correct
PolarsInefficientMapWarning
for lshift/rshift operations (#12385) - revert ternary special broadcast, ensure broadcast is always to max height (#12395)
- ensure first/last return null if empty (#12401)
🛠️ Other improvements
- fix and improve ternary evaluation on groups (#12529)
- Add
polars-ds
to list of community plugins (#12527) - Future-proof consortium standard test (#12524)
- add schema test (#12523)
- remove lexical (replace with atoi_simd, ryu, and itao). (#12512)
- add test for previous commit (#12510)
- Update
polars-hash
reference (#12505) - Add note on hash stability and mention
polars-hash
(#12496) - Support Python 3.12 (#12094)
- Improved
import polars
timing test; now much more consistent/reliable (#12478) - Use
.with_columns()
in all.list
namespace examples (#12475) - update rustc (#12468)
- Fix docs trigger (#12449)
- Update for new maturin release (#12437)
- Remove 'experimental' tag for auto-structify setting (#12435)
- make "DataFrame" and "Series" case more consistent across docs/comments/errors (#12428)
- dprint/markdown link checker minor updates (#12409)
- Use
manylinux_2_17
for buildingx86-64
wheel (#12408) - Use manylinux 2.24 instead of 2.28 for compatibility reasons (#12397)
- use with_columns in is_in example, and fix some bullet points not rendering (#12383)
Thank you to all our contributors for making this release possible!
@MarcoGorelli, @abstractqqq, @alexander-beedie, @c-peters, @cmdlineluser, @hirohira9119, @ion-elgreco, @jerome3o, @nameexhaustion, @reswqa, @ritchie46, @stinodego and @uchiiii