rs-0.48.0
Breaking Changes📦 polarsView on GitHub →
⚠ 1 breaking✨ 11 features🐛 29 fixes🔧 12 symbols
Summary
This release introduces several performance improvements, new features like list.filter and schema matching for LazyFrames, and addresses numerous bugs, including panics and incorrect outputs in various operations. A breaking change involves updating how time zone information is stored internally.
⚠️ Breaking Changes
- Use a wrapper struct to store time zone. This likely affects how time zone information is handled internally or accessed, requiring consumers relying on the previous structure to update their code.
✨ New Features
- Implemented list.filter.
- Support binaryoffset in search sorted.
- Add nulls_equal flag to list/arr.contains.
- Allow named opaque functions for serde.
- Implement LazyFrame.match_to_schema.
- Improved time-string parsing and inference (generally, and via the SQL interface).
- Allow for .over to be called without partition_by.
- Support AnyValue translation from PyMapping values.
- Add options to write Parquet field metadata.
- Allow casting List<UInt8> to Binary.
- Allow setting of regex size limit using POLARS_REGEX_SIZE_LIMIT.
🐛 Bug Fixes
- Fix reverse list type.
- Add type equality checking for relevant methods.
- Invalid output for fill_null after when.then on structs.
- Don't panic for cross join with misaligned chunking.
- Panic on quantile over nulls in rolling window.
- Respect BinaryOffset metadata.
- Correct the output order of PartitionByKey and PartitionParted.
- Fallback to non-strict casting for deprecated casts.
- Handle sliced out remainder for bitmaps.
- Don't merge Enum categories on append.
- Fix unnest() not working on empty struct columns.
- Correct name in unnest error message.
- Properly account for nulls in the is_not_nan check made in drop_nans.
- Incorrect result from SQL count(*) with partition by.
- Fix deadlock joining scanned tables with low thread count.
- Don't allow deserializing incompatible DSL.
- Incorrect null dtype from binary ops in empty group_by.
- Don't mark str.replace_many with Mapping as deprecated.
- Gzip has maximum compression of 9, not 10.
- Fix predicate pushdown of fallible expressions.
- Fix index out of bounds panic when scanning hugging face.
- Fix polars crate not compiling when lazy feature enabled.
- Panic on group_by with literal and empty rows.
- Return input instead of panicking if empty subset in drop_nulls() and drop_nans().
- Fix nested dtype row encoding.
- Allow Expr.round() to be called on integer dtypes.
- Fix panic when filtering based on row index column in parquet.
- WASM and PyOdide compile.
- Resolve get() SchemaMismatch panic.
🔧 Affected Symbols
list.evalfrom_recordslist.containsLazyFrame.match_to_schemaunnest()drop_nans()drop_nulls()Expr.round()str.replace_manyPOLARS_REGEX_SIZE_LIMITsink_*PolarsDataType::get_dtype