Warning
This release was yanked. Please use the 0.20.28 release instead.
⚠️ Deprecations
- Change parameter
chunked
toallow_chunks
in parametric testing strategies (#16264)
🚀 Performance improvements
- Use branchless uleb128 decoding for parquet (#16352)
- Reduce error bubbling in parquet hybrid_rle (#16348)
- use is_sorted in ewm_mean_by, deprecate check_sorted (#16335)
- Optimize
is_sorted
for numeric data (#16333) - do not use pyo3-built (#16309)
- Faster bitpacking for Parquet writer (#16278)
- Improve
Series.to_numpy
performance for chunked Series that would otherwise be zero-copy (#16301) - Further optimise initial
polars
import (#16308) - Avoid importing
ctypes.util
in CPU check script if possible (#16307) - Don't rechunk when converting DataFrame to numpy/ndarray (#16288)
- use zeroed vec in ewm_mean_by for sorted fastpath (#16265)
✨ Enhancements
- expose BooleanFunction in expr IR (#16355)
- Allow
read_excel
to handle bytes/BytesIO directly when using the "calamine" (fastexcel) engine (#16344) - Raise when joining on the same keys twice (#16329)
- Don't require data to be sorted by
by
column inrolling_*_by
operations (#16249) - Support List types in
Series.to_numpy
(#16315) - Add
to_jax
methods to support Jax Array export fromDataFrame
andSeries
(#16294) - Enable generating data with time zones in parametric testing (#16298)
- Add struct.field expansion (regex, wildcard, columns) (#16320)
- Add new
alpha
,alphanumeric
anddigit
selectors (#16310) - Faster bitpacking for Parquet writer (#16278)
- Add
require_all
parameter to theby_name
column selector (#15028) - Start updating
BytecodeParser
for Python 3.13 (#16304) - Add
struct.with_fields
(#16305) - Handle implicit SQL string → temporal conversion in the
BETWEEN
clause (#16279) - Expose string expression nodes to python (#16221)
- Add new index/range based selector
cs.by_index
, allow multiple indices fornth
(#16217) - Show warning if expressions are very deep (#16233)
- Fix some issues in parametric testing with nested dtypes (#16211)
🐞 Bug fixes
- pick a consistent order for the sort options in PyIR (#16350)
- Infer CSV schema as supertype of all files (#16349)
- Fix issue in parametric testing where
excluded_dtypes
list would grow indefinitely (#16340) - Address overflow combining u64 hashes in Debug builds (#16323)
- Don't exclude explicitly named columns in group-by context' expr expansion (#16318)
- Improve
map_elements
typing (#16257) - Harden
Series.reshape
against invalid parameters (#16281) - Fix list.sum dtype for boolean (#16290)
- Don't stackoverflow on all/any horizontal (#16287)
- Fix
Series.to_numpy
for Array types with nulls and nested Arrays (#16230) - `rolling_*_by was throwing incorrect error when dataframe was sorted by contained multiple chunks (#16247)
- Don't allow passing missing data to generalized ufuncs (#16198)
- Address overly-permissive
expand_selectors
function, minor fixes (#16250) - Add missing support for parsing instantiated Object dtypes
Object()
(#16260) - Reading CSV with low_memory gave no data (#16231)
- Add missing
read_database
overload (#16229) - Fix a rounding error in parametric test datetimes generation (#16228)
- Fix some issues in parametric testing with nested dtypes (#16211)
📖 Documentation
- Add missing word in
join
docstring (#16299) - document that month_start/month_end preserve the current time (#16293)
- Add example for separator parameter in pivot (#15957)
📦 Build system
🛠️ Other improvements
- Move
DataFrame.to_numpy
implementation to Rust side (#16354) - Organize PyO3 NumPy code into
interop::numpy
module (#16346) - simplify interpolate code, add test for rolling_*_by with nulls (#16334)
- Very minor refactor of
DataFrame.to_numpy
code (#16325) InterchangeDataFrame.version
should be aClassVar
(not aproperty
) (#16312)- Add
polars-expr
README (#16316) - Raise import timing test threshold (#16302)
- Use
cls
(notself
) in classmethods (#16303) - Use Scalar instead of Series some aggregations (#16277)
- Do not hardcode bash path in Makefile (#16263)
- Add IR::Reduce (not yet implemented) (#16216)
- move all describe, describe_tree and dot-viz code to IR instead of DslPlan (#16237)
Thank you to all our contributors for making this release possible!
@MarcoGorelli, @NickCondron, @ShivMunagala, @alexander-beedie, @brandon-b-miller, @coastalwhite, @datenzauberai, @itamarst, @jsarbach, @max-muoto, @nameexhaustion, @orlp, @r-brink, @ritchie46, @stinodego, @thalassemia, @twoertwein and @wence-