py-1.33.1

pola-rs/polarspy-1.33.1Sep 9, 2025by github-actions[bot]

AI Summary

Python Polars 1.33.1 improves cloud IO capabilities, adds PyCapsule interfaces for better interoperability, and fixes various group-by and join issues.

Key Highlights

  • PyCapsule `__arrow_c_schema__` interface for Schema
  • S3 virtual-hosted style URI support
  • Performance improvements for Parquet dictionary encoding
  • User-friendly error messages on empty path expansion

New Features

  • S3 virtual-hosted style URI support
  • unstable `pre_execution_query` parameter
  • PyCapsule `__arrow_c_schema__` interface

Full Release Notes

## 🚀 Performance improvements

- Use specialized decoding for all predicates for Parquet dictionary encoding (#24403)
- Allocate only for read items when reading Parquet with predicate (#24401)
- Don't aggregate groups for strict cast if original len (#24381)
- Allocate only for read items when reading Parquet with predicate (#24324)

## ✨ Enhancements

- Support S3 virtual-hosted–style URI (#24405)
- Remove explicit file create for local async writes (#24358)
- Add PyCapsule `__arrow_c_schema__` interface to `pl.Schema` (#24365)
- Support Partitioning sinks in cloud (#24399)
- User-friendly error message on empty path expansion (#24337)
- Add unstable `pre_execution_query` parameter to `read_database_uri` (#23634)
- Add Polars security policy (#24314)

## 🐞 Bug fixes

- Correct `sink_ipc` overload for compression (#24398)
- Enable all integer dtypes for `by` parameter in `join_asof` (#24384)
- Fix Group-By + filter aggregation performs subsequent operations on all data instead of only filtered data (#24373)
- Wrap deprecated top-level imports in TYPE\_CHECKING (#24340)
- Fix incorrect output ordering for row-separable exprs (#24354)
- Fix `Series.__arrow_c_stream__` for Decimal and other logical types (#24120)
- Match output type to engine for `Struct` arithmetic (#23805)
- Make mmap use MAP\_PRIVATE rather than MAP\_SHARED (#24343)
- Fix cloud iceberg scan DATASET\_PROVIDER\_VTABLE error (#24338)
- Don't throw away type information for NumPy numeric values when using lit() (#24229)
- Incorrect logic in negative streaming slice (#24326)
- Ensure `read_database_uri` with ADBC works as expected with DuckDB URIs (#24097)
- Do not error on non-list `Sequence` for `columns` parameter in `read_excel` (#23967)

## 📖 Documentation

- Document newly added `is_pure` parameter for `register_io_source` (#24311)
- Create a module docstring for the public `polars` module (#24332)
- Update to Polars Cloud user guide (#24187)
- Update distributed page (#24323)
- Add a note and example about exporting unformatted `Excel` sheet data (#24145)
- Add detail about server-side cursor behaviour for SQLAlchemy in the "iter\_batches" parameter of `read_database` (#24094)
- Add Polars security policy (#24314)

## 🛠️ Other improvements

- Bump c-api (#24412)
- Add a regression test for #7631 (#24363)
- Update cloud test `InteractiveQuery` to `DirectQuery` (#24287)
- Mark some tests as slow (#24327)
- Mark more tests as ready for cloud (#24315)
- Add hint to update `PYPOLARS_VERSION` on version assert test (#24313)

Thank you to all our contributors for making this release possible!
@Kevin-Patyk, @VictorAtIfInsurance, @alexander-beedie, @coastalwhite, @dsprenkels, @itamarst, @kdn36, @kuril, @mcrumiller, @nameexhaustion, @nesb1, @orlp, @r-brink and @ritchie46