Polars py-1.42.1 - Panic Fixes and Parquet Metadata
Polars py-1.42.1 was published on June 30, 2026 as the Python Polars 1.42.1 release. This stable patch release is not a prerelease, and its useful theme is fewer panics around parquet scans, grouped aggregation, projection pushdown, temporal extraction, and value replacement.
The full release notes and downloads are on the GitHub release page.
Panic fixes in query execution
Polars users running lazy queries get several defensive fixes in this release. A sorted fast path could return nan for grouped max, which is the kind of result bug that can sit in a pipeline until someone compares aggregates by hand. The release also fixes a projection pushdown panic for select(len()) after groupby.
Parquet scanning gets a concrete crash fix too. A filter on a fixed size binary column in scan_parquet could panic. That matters for datasets with binary keys, hashes, or compact encoded identifiers, where a scan should either return rows or fail with a useful error, not take the process down.
There are also fixes for temporal extraction on datetime columns with nulls and for replace when old or new contain Expr values or object dtype values. These are not glamorous changes, but they hit normal data cleanup paths. The practical result is less surprise in code that mixes expressions, nullable datetime data, and replacement maps.
Parquet metadata and path handling
The performance section has a small but relevant parquet change: Polars now has a sampled resolve mode for multi file parquet metadata. For users reading many parquet files, metadata resolution can become visible before any useful compute happens. Sampling is a sensible path for cutting that setup cost when full metadata inspection is heavier than the query deserves.
Path expansion also changes so it does not block. The release notes do not spell out every call site, so treat this as a runtime behavior improvement rather than a new API surface. It should mainly matter where file discovery and scan setup used to add latency before execution could continue.
Cloud and lake style usage gets one fix that is easy to miss. AWS DeferredRefreshableCredentials now has expiry time loading fixed. If Polars jobs read protected object storage with refreshed AWS credentials, this is the sort of small credential lifecycle bug that can turn into flaky production behavior.
Numeric and decimal correctness
Small dtype series sums are faster through an upcast sum kernel. The wording in the release notes is narrow, so this is not a general promise that all aggregation got faster. It is aimed at smaller numeric dtypes where summing through a wider kernel can avoid slow paths while keeping the result behavior sane.
Decimal casting also gets attention with a fix for decimal dynamic float casts. Decimal handling is usually where data tools get judged by finance and analytics users with little patience. A cast bug here is more than a cosmetic issue, because the wrong conversion can leak into reports or joins.
The pyiceberg HDFS prefix filter also gets a bug fix for key dot handling. That is a specific interoperability fix, but it belongs in the same bucket: reading table metadata and paths should not depend on surprising string edge cases.
Test and tooling cleanup
Some of the release is maintenance work. ResourceWarning leaks were closed in database tests, and remaining leaks in database and iceberg tests were fully resolved. That is mostly internal hygiene, but it reduces noise for contributors and helps keep real resource lifecycle issues visible.
The repository tooling also gets stricter. The maintainers disallowed tokio::spawn usage in clippy, improved Makefile venv robustness, updated mypy to the new 2.x release, and made sure pyrefly checks run as part of make pre-commit. Those changes are contributor focused, but they tell you where the project is tightening checks around async Rust use, Python typing, and local validation.
Documentation updates are modest. The examples had a dataset regression fixed, the user guide now mentions the Polars skill in the LLM section, and contributor guidance now emphasizes generally not writing Rust tests. That last note is blunt, but it is useful if you are preparing a contribution and want to avoid review churn.
Upgrade notes
The one explicit deprecation is strict on pl.concat. The replacement is how='horizontal_extend'. If your code uses pl.concat(..., strict=...), this release is the time to update it while the change is still just a deprecation.
There are no breaking changes called out in the release notes. Still, teams with parquet heavy workloads, AWS credential refresh, decimal casts, or grouped max queries should run their normal regression checks. The fixes are targeted, and targeted fixes deserve targeted tests.
Where to get it
- Release page: GitHub release page
- Project repo: project repository
- Tag:
py-1.42.1