pypi / pyarrow
pyarrow
What changed in pyarrow 23 to 26, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-20.
7 breaking3 security2 deprecations21 new APIs and options1 performance4 behavior and defaults1 tooling36 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initpyarrow 2655 changes
Breaking changes 6
Appending binary values over 2 GiB now raises CapacityError instead of truncating them.
Rejects inputs that are not Buffer objects.
PyArrow now requires NumPy 2.0.
PyArrow drops support for Pandas versions earlier than 2.0.3.
PyArrow drops support for Python 3.10.
Schema nesting depth is limited when reading Parquet files.
Security 2
Fixes a heap buffer overflow in FillNullForward and FillNullBackward.
Gandiva REPLACE no longer reports a buffer overflow for results larger than 64 KB.
New APIs and options 15
Python exposes Array::ToTensor, including support for fixed size lists.
Arrays and Tensor can consume DLPack objects.
The CSV reader can ignore extra columns in rows that contain more columns.
The dataset writer accepts write_table options.
FixedShapeTensorArray can produce DLPack objects.
FixedShapeTensorScalar can produce DLPack objects.
PyArrow adds conversion from NumPy StringDType to Arrow.
The MemoryPool used by Parquet ReaderProperties can now be set.
The use_content_defined_chunking option is explicitly exposed on ParquetWriter.
Python exposes RecordBatchFileReader.count_rows for counting rows in a record batch file.
Python exposes the record_batch_reader_source Acero node.
A search sorted compute kernel is added for Python and C++.
The use_content_defined_chunking option is explicitly exposed on write_table.
Python exposes the CSV writer's eol option so developers can configure the line ending.
Python exposes the CSV writer's null_string option so developers can configure how nulls are written.
Behavior and default changes 4
The CSV reader can pad rows that are missing trailing fields.
PyArrow moves to DLPack 1.3.
Parquet reading tolerates unrecognized logical and physical type combinations.
Python slice methods now accept Arrow integer scalars.
Tooling 1
PyArrow packaging adds support for Python 3.15.
Fixes and other changes 27
The CSV parse delimiter is propagated to write options.
Fixes parsing rows containing an embedded NUL byte.
Fixes the default start value for floating-point types in cumulative_max and cumulative_min.
Fixes filtering Arrow Datasets with a date expression on the right-hand side.
Fixes a correctness error in the decimal round_binary kernel.
Parquet reading now supports fixed size list arrays with nulls.
Breaks a reference cycle between the C++ server base and Python object to avoid leaking the server.
Fixes incorrect values when reading a Parquet file with a Float16 column.
Deleting a key returns IndexError instead of crashing when the key is missing.
Fixes incorrect new column names when using mutate with if_any.
Fixes pivot_wider when group ids are non-monotonic.
Fixes unification of nested uint64 fields inside a Struct array across record batches.
Fixes unification of nested Enum fields inside a Struct array across record batches.
Rejects read-only destinations.
Argument names in a schema supplied as in_type are no longer ignored.
Calling resize on an unopened object raises an exception instead of crashing.
Run-end encoded values now support struct, list view, large list view, and map types.
S3 filesystem metadata now supports Content-Encoding.
Scalar and Array arithmetic dunders return NotImplemented for unsupported types.
Initializes output for empty select_k inputs.
Adds Substrait mappings for starts_with, ends_with, and match_substring.
R str_replace() now matches base/stringr semantics when the replacement is NA.
Fixes Table.from_struct_array for an empty ChunkedArray.
Writing with TeeNode now preserves order.
Building from values now preserves unsigned dictionary index types.
UUID extension type round-trips to pandas as UUID values rather than bytes.
Validity kernels now handle logical nulls.
pyarrow 2519 changes
Breaking changes 1
Reading a single Parquet file no longer adds partition columns from its file path.
Deprecations 2
Narrows the Feather deprecation to the V1 format.
The Feather Python package was deprecated.
New APIs and options 6
An optional default_column_type parameter was introduced for column type selection.
Lists of multidimensional arrays can now be converted to FixedShapeTensor.
A hypot compute kernel was added.
pa.OSFile now supports raw file descriptors.
A direct key encryption/decryption API was added for Python Parquet use.
Conversion of a Table to an Arrow Tensor was added.
Performance 1
Converts arrays to Python objects without creating per-element Scalars.
Fixes and other changes 9
Fixes a SIGSEGV when libarrow is first loaded on a non-main thread that exits.
Fixes silent incorrect values when decoding a double column on aarch64 SVE.
Bloom filter length metadata is now exposed to Python in column chunk metadata.
Bloom filter offset metadata is now exposed to Python in column chunk metadata.
When a pandas DataFrame already contains an __index_level_i__ column, the index level is bumped once.
list_ storage no longer crashes when values exceed int32 offsets.
read_schema now supports extension types.
Inconsistent default values for Parquet pre_buffer were fixed.
Converting a timezone-aware Categorical to an Arrow array no longer drops its timezone.
pyarrow 231 changes
Security 1
Apache Arrow: Potential use-after-free when reading IPC file with pre-buffering