Python Polars py-1.43.2, published on August 1, 2026, focuses on correctness at Parquet, Iceberg, and Arrow boundaries. The most important change fixes a double counted offset when exporting a sliced Series(Array), with further fixes for enum metadata and Parquet field IDs.
The full release notes and downloads are on the GitHub release page.
Parquet, Iceberg, and Arrow boundaries ¶
This release repairs enum metadata propagation during Iceberg column mapping. It also corrects the Parquet field IDs written for enum and categorical columns. Both changes concern schema information that can outlive a single Polars process and be consumed by another engine.
The notes do not announce a schema migration or format change. Even so, teams with golden Parquet fixtures should compare schema metadata as well as row values after upgrading. A value only assertion will not detect a field ID or logical type metadata regression.
Two Arrow offset bugs are also fixed. Arrow C interoperability now handles the binary view offset correctly. Exporting a sliced Series(Array) no longer counts the offset twice. These are narrow fixes, but they sit on interchange paths where a slice can cross a process or library boundary. Pipelines that exchange sliced nested arrays through Arrow should keep a regression case for both values and offsets.
The affected cases involve slices, so a test built only from complete columns will miss the condition described in the notes. Include a nonzero slice before export. Check the exported length, values, and null positions at the receiving boundary.
Lazy plans retain slice and order semantics ¶
The optimizer receives related corrections around joins and unions. Slice pushdown into joins is now more careful, including the case where a join requires sorting. Sliced unions also preserve ordering.
These are result correctness changes, not only planner cleanup. A lazy plan can combine a join, a union, and a final slice without exposing the intermediate ordering decisions to application code. Existing tests should therefore assert the selected rows and their order when those operators appear together.
Planner corrections are sensitive to query shape. A useful upgrade test should keep the sort required by the join, apply the slice after the join, and compare the result with a small eager reference. For unions, assert order directly instead of comparing rows as an unordered set.
CSV planning and count execution ¶
scan_csv adds the infer_schema_files parameter. It gives callers an explicit control for schema inference across file scans. This is useful for data sets where the first file does not represent later files, although the release notes do not specify defaults or a migration requirement.
Do not choose a new setting from the parameter name alone. Inspect how many source files carry uncommon columns or wider types, then exercise that layout in a schema test. The notes provide the control but no accuracy or scan cost comparison.
The main stated performance change pushes len() into concat and union inputs. That lets the lazy planner move a count closer to the source branches instead of leaving it above the combined plan. The release notes include no benchmark, so the effect should be measured against the actual file layout and plan shape.
Upgrade notes ¶
Casts from Categorical to integer data types are now deprecated. Calls to show_graph() that omit plan_stage are also deprecated. Make that argument explicit before a later release removes the implicit behavior.
The notes do not name a replacement for categorical integer casts, so do not guess at a new contract. Inventory those casts and make their intended output explicit in tests. Treat deprecation warnings as upgrade work while the old calls still run, rather than waiting for a later removal.
Where to get it ¶
- Release: Python Polars 1.43.2
- Repository: pola-rs/polars
- Tag:
py-1.43.2