# What changed in pyarrow

> 75 changes in pyarrow 23 to 26 from its official release notes, upgrade guides and advisories: 7 breaking, 2 deprecations, 3 security, 21 new APIs and options. Each one cited. Sources checked 2026-10-20. HTML: https://unstale.sh/pypi/pyarrow/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## pyarrow 26

### Breaking changes

- Appending binary values over 2 GiB now raises CapacityError instead of truncating them. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Rejects inputs that are not Buffer objects. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- PyArrow now requires NumPy 2.0. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- PyArrow drops support for Pandas versions earlier than 2.0.3. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- PyArrow drops support for Python 3.10. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Schema nesting depth is limited when reading Parquet files. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)

### Security

- Fixes a heap buffer overflow in FillNullForward and FillNullBackward. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Gandiva REPLACE no longer reports a buffer overflow for results larger than 64 KB. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)

### New APIs and options

- Python exposes Array::ToTensor, including support for fixed size lists. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Arrays and Tensor can consume DLPack objects. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- The CSV reader can ignore extra columns in rows that contain more columns. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- The dataset writer accepts write_table options. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- FixedShapeTensorArray can produce DLPack objects. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- FixedShapeTensorScalar can produce DLPack objects. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- PyArrow adds conversion from NumPy StringDType to Arrow. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- The MemoryPool used by Parquet ReaderProperties can now be set. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- The use_content_defined_chunking option is explicitly exposed on ParquetWriter. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Python exposes RecordBatchFileReader.count_rows for counting rows in a record batch file. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Python exposes the record_batch_reader_source Acero node. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- A search sorted compute kernel is added for Python and C++. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- The use_content_defined_chunking option is explicitly exposed on write_table. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Python exposes the CSV writer's eol option so developers can configure the line ending. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Python exposes the CSV writer's null_string option so developers can configure how nulls are written. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)

### Behavior and default changes

- The CSV reader can pad rows that are missing trailing fields. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- PyArrow moves to DLPack 1.3. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Parquet reading tolerates unrecognized logical and physical type combinations. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Python slice methods now accept Arrow integer scalars. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)

### Tooling

- PyArrow packaging adds support for Python 3.15. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)

### Fixes and other changes

- The CSV parse delimiter is propagated to write options. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes parsing rows containing an embedded NUL byte. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes the default start value for floating-point types in cumulative_max and cumulative_min. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes filtering Arrow Datasets with a date expression on the right-hand side. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes a correctness error in the decimal round_binary kernel. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Parquet reading now supports fixed size list arrays with nulls. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Breaks a reference cycle between the C++ server base and Python object to avoid leaking the server. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes incorrect values when reading a Parquet file with a Float16 column. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Deleting a key returns IndexError instead of crashing when the key is missing. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes incorrect new column names when using mutate with if_any. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes pivot_wider when group ids are non-monotonic. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes unification of nested uint64 fields inside a Struct array across record batches. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes unification of nested Enum fields inside a Struct array across record batches. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Rejects read-only destinations. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Argument names in a schema supplied as in_type are no longer ignored. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Calling resize on an unopened object raises an exception instead of crashing. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Run-end encoded values now support struct, list view, large list view, and map types. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- S3 filesystem metadata now supports Content-Encoding. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Scalar and Array arithmetic dunders return NotImplemented for unsupported types. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Initializes output for empty select_k inputs. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Adds Substrait mappings for starts_with, ends_with, and match_substring. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- R str_replace() now matches base/stringr semantics when the replacement is NA. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Fixes Table.from_struct_array for an empty ChunkedArray. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Writing with TeeNode now preserves order. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Building from values now preserves unsigned dictionary index types. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- UUID extension type round-trips to pandas as UUID values rather than bytes. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)
- Validity kernels now handle logical nulls. (26.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2600-2026-10-09-0000000000)

## pyarrow 25

### Breaking changes

- Reading a single Parquet file no longer adds partition columns from its file path. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)

### Deprecations

- Narrows the Feather deprecation to the V1 format. (25.0.1) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2501-2026-08-07-0000000000)
- The Feather Python package was deprecated. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)

### New APIs and options

- An optional default_column_type parameter was introduced for column type selection. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- Lists of multidimensional arrays can now be converted to FixedShapeTensor. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- A hypot compute kernel was added. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- pa.OSFile now supports raw file descriptors. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- A direct key encryption/decryption API was added for Python Parquet use. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- Conversion of a Table to an Arrow Tensor was added. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)

### Performance

- Converts arrays to Python objects without creating per-element Scalars. (25.0.1) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2501-2026-08-07-0000000000)

### Fixes and other changes

- Fixes a SIGSEGV when libarrow is first loaded on a non-main thread that exits. (25.0.1) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2501-2026-08-07-0000000000)
- Fixes silent incorrect values when decoding a double column on aarch64 SVE. (25.0.1) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2501-2026-08-07-0000000000)
- Bloom filter length metadata is now exposed to Python in column chunk metadata. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- Bloom filter offset metadata is now exposed to Python in column chunk metadata. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- When a pandas DataFrame already contains an __index_level_i__ column, the index level is bumped once. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- list_ storage no longer crashes when values exceed int32 offsets. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- read_schema now supports extension types. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- Inconsistent default values for Parquet pre_buffer were fixed. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)
- Converting a timezone-aware Categorical to an Arrow array no longer drops its timezone. (25.0.0) — [release notes](https://github.com/apache/arrow/blob/71826eb1fa86275a5edae1ee5c453854a3088336/CHANGELOG.md#apache-arrow-2500-2026-07-07-0000000000)

## pyarrow 23

### Security

- Apache Arrow: Potential use-after-free when reading IPC file with pre-buffering (23.0.1) — [security advisory](https://github.com/advisories/GHSA-RGXP-2HWP-JWGG)
