py-1.28.0
📦 polarsView on GitHub →
✨ 9 features🐛 24 fixes⚡ 1 deprecations🔧 20 symbols
Summary
This release focuses heavily on performance improvements, particularly within the streaming engine, and introduces several new features like enhanced rolling statistics and GPU support for sink APIs. Numerous bug fixes address issues across data types, I/O operations, and streaming execution.
✨ New Features
- Add Series `backward_fill` / `forward_fill` (#22360)
- Add GPU support to sink* APIs (#20940)
- Make streaming dispatch public (#22347)
- Add `rolling_kurtosis` (#22335)
- Add `.sort(nulls_last=True)` to booleans, categoricals and enums (#22300)
- Add rolling min/max for temporals (#22271)
- Support literal:list agg (#22249)
- Support running Polars SQL queries against any objects implementing the PyCapsule interface (#22235)
- Support `implode + agg` (#22230)
🐛 Bug Fixes
- Ensure `write_excel` correctly preserves null values in nested dtype data on export (#22379)
- Panic when visualizing streaming physical plan with joins (#22404)
- Fix incorrect filter after `LazyFrame.rename().select()` (#22380)
- Fix `select(len())` performance regression (#22363)
- Handle pytz named timezone in `lit` (#21785)
- Don't leak state during prefill CSE cache (#22341)
- Maintain float32 type in partitioned group-by (#22340)
- Resolve streaming panic on multiple `merge_sorted` (#22205)
- Fix ndjson nested types (#22325)
- Fix nested datetypes in ndjson (#22321)
- Check matching lengths for `pl.corr` (#22305)
- Move type coercion for `pl.duration` to planner (#22304)
- Check dtype to avoid panic with mixed types in min/max_horizontal (#21857)
- Coalesce correct column for new streaming full join (#22301)
- Don't collect `NaN` from Parquet Statistics (#22294)
- Set revmap for empty `AnyValue` to `Series` (#22293)
- Datetime parser was incorrectly parsing 8-digit fractional seconds when format specified to expect 9 (#22180)
- More robust `str → date` conversion when reading from spreadsheet (#22276)
- Duplicate key column name in streaming group_by due to CSE (#22280)
- Raise `ColumnNotFoundError` for missing columns in `join_where` (#22268)
- Parquet filters for logical types and operations (#22253)
- Ensure floating-point accuracy in `hist` (#22245)
- Check matching key datatypes for new streaming joins (#22247)
- Incorrect length BinaryArray/ListBuilder (#22227)
🔧 Affected Symbols
Expr.(n_unique)Series.backward_fillSeries.forward_fillsink*is_inrolling_quantilerolling_skewrolling_kurtosisrolling min/maxliteral:list aggPyCapsule interfaceimplode + aggwrite_excelLazyFrame.rename().select()select(len())pl.corrpl.durationmin/max_horizontalstr → date conversionjoin_where⚡ Deprecations
- Deprecate using `is_in` with 2 equal types and mark as elementwise (#22178)