# Polars 1.7.0 — Python Polars 1.7.0 - Product: Polars (https://whatsnew.fyi/product/polars) - Vendor: Polars - Date: 2024-09-11 - Version: 1.7.0 - Original notes: https://github.com/pola-rs/polars/releases/tag/py-1.7.0 - Permalink: https://whatsnew.fyi/product/polars/releases/1.7.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Support IO[bytes] and bytes in scan_{...} functions - **added** — IEJoin algorithm for non-equi joins and support for Full non-equi joins - **added** — Optimizer rules for is_null().all() and similar expressions to use null_count() - **added** — Tooltip by default to charts - **added** — Support for shortcut eval of common boolean filters in SQL interface WHERE clause - **added** — Make expressions containing Python UDFs serializable - **changed** — Back arrow arrays with SharedStorage which can have non-refcounted static slices - **changed** — PlSmallStr implementation from Arc to compact_str - **changed** — Enable Parquet parallel=prefiltered for auto - **changed** — BytecodeParser for upcoming Python 3.13 - **changed** — join_where semantics - **fixed** — Use IO[bytes] instead of BytesIO in DataFrame.write_parquet() - **fixed** — Scalar checks - **fixed** — Scanning hive partitioned files where hive columns are partially included in the file - **fixed** — Use Buffer in ObjectSeries, fixes variety of offset bugs - **fixed** — Properly slice validity mask on pl.Object series - **fixed** — Raise if single argument form in replace/replace_strict is not a mapping - **fixed** — Group first value after group-by slice - **fixed** — Allow for date/datetime subclasses such as pd.Timestamp and FreezeGun in pl.lit - **fixed** — Output type for list.eval in certain cases ##### 🏆 Highlights - Add support for `IO[bytes]` and `bytes` in `scan_{...}` functions (#18532) - Add IEJoin algorithm for non-equi joins and support Full non-equi joins (#18365) ##### 🚀 Performance improvements - Back arrow arrays with SharedStorage which can have non-refcounted static slices (#18666) - Don't traverse file list twice for extension validation (#18620) - Remove cloning of `ColumnChunkMetadata` (#18615) - Add upfront partitioning in `ColumnChunkMetadata` (#18584) - Enable Parquet `parallel=prefiltered` for `auto` (#18514) - Change `PlSmallStr` impl from `Arc` to `compact_str` (#18508) - Added optimizer rules for `is_null().all()` and similar expressions to use `null_count()` (#18359) ##### ✨ Enhancements - Update `BytecodeParser` for upcoming Python 3.13 (#18677) - Add tooltip by default to charts (#18625) - Add support for `IO[bytes]` and `bytes` in `scan_{...}` functions (#18532) - Support shortcut eval of common boolean filters in SQL interface "WHERE" clause (#18571) - Add IEJoin algorithm for non-equi joins and support Full non-equi joins (#18365) - Make expressions containing Python UDFs serializable (#18135) ##### 🐞 Bug fixes - Use IO[bytes] instead of BytesIO in `DataFrame.write_parquet()` (#18652) - Scalar checks (#18627) - Scanning hive partitioned files where hive columns are partially included in the file (#18626) - Enable "polars-json/timezones" feature from "polars-io" (#18635) - Use Buffer\ in ObjectSeries, fixes variety of offset bugs (#18637) - Properly slice validity mask on pl.Object series (#18631) - Raise if single argument form in `replace`/`replace_strict` is not a mapping (#18492) - Fix group first value after group-by slice (#18603) - Allow for date/datetime subclasses (e.g. pd.Timestamp, FreezeGun) in pl.lit (#18497) - Fix output type for `list.eval` in certain cases (#18570) - Fix `map_elements` for List return dtypes (#18567) - Check for duplicate column names in `read_database` cursor result, raising `DuplicateError` if found (#18548) - Do not remove double-sort if `maintain_order=True` (#18561) - Empty any\_horizontal should be false, not true (#18545) - Fix type inference error in `map_elements` for List types (#18542) - Address incorrect `align_frames` result when the alignment column contains NULL values (#18521) - Fix advertised version in source builds (#18523) - Handle Parquet projection pushdown with only row index (#18520) - DataFrame `write_database` not passing down "engine\_options" when using ADBC (#18451) - Properly raise on invalid selector expressions (#18511) - Wrong output column name in `or` and `xor` operations (#18512) - Normalize by default in Series.entropy like Expr.entropy does (#18493) - Various schema corrections (#18474) - Don't drop objects on empty buffers (#18469) - Expr.sign should preserve dtype (#18446) - Ensure `assert_frame_not_equal` and `assert_series_not_equal` raise on mismatched input types (#18402) - Fixed `Worksheet` definition in `write_excel` type annotations (#18452) ##### 📖 Documentation - Update join\_where docs to clarify behaviour (#18670) - Fix multiprocessing docs regarding fork method check (#18563) - Various docstring improvements to `testing.assert_*` functions (#18494) - Fix formula in ewm\_mean\_by (#18506) - Pre-compute plugin\_path before defining plugin (#18503) - Add Expr.null\_count to aggregations (#18459) ##### 🛠️ Other improvements - Fix a bunch of tests for new-streaming (#18659) - Don't raise on multiple same names in ie\_join (#18658) - Check predicates in join\_where (#18648) - Change join\_where semantics (#18640) - Add benchmark tests for join\_where with inequalities (#18614) - Check number of binary comparisons in join\_where predicates (#18608) - Raise on suffixed predicate in join\_where (#18607) - Fix Python docs build (#18605) - Use `streaming` argument in `test_parquet_slice_pushdown_non_zero_offset` (#18529) - Fix delta test merge (#18601) - Alter/skip some tests for new streaming ( _[Truncated at 4000 characters — full notes: https://github.com/pola-rs/polars/releases/tag/py-1.7.0]_