unstale

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 init

@unstale/cli on npm

pyarrow 2655 changes

Breaking changes 6

  • Appending binary values over 2 GiB now raises CapacityError instead of truncating them.

    26.0.0release notes

  • Rejects inputs that are not Buffer objects.

    26.0.0release notes

  • PyArrow now requires NumPy 2.0.

    26.0.0release notes

  • PyArrow drops support for Pandas versions earlier than 2.0.3.

    26.0.0release notes

  • PyArrow drops support for Python 3.10.

    26.0.0release notes

  • Schema nesting depth is limited when reading Parquet files.

    26.0.0release notes

Security 2

  • Fixes a heap buffer overflow in FillNullForward and FillNullBackward.

    26.0.0release notes

  • Gandiva REPLACE no longer reports a buffer overflow for results larger than 64 KB.

    26.0.0release notes

New APIs and options 15

  • Python exposes Array::ToTensor, including support for fixed size lists.

    26.0.0release notes

  • Arrays and Tensor can consume DLPack objects.

    26.0.0release notes

  • The CSV reader can ignore extra columns in rows that contain more columns.

    26.0.0release notes

  • The dataset writer accepts write_table options.

    26.0.0release notes

  • FixedShapeTensorArray can produce DLPack objects.

    26.0.0release notes

  • FixedShapeTensorScalar can produce DLPack objects.

    26.0.0release notes

  • PyArrow adds conversion from NumPy StringDType to Arrow.

    26.0.0release notes

  • The MemoryPool used by Parquet ReaderProperties can now be set.

    26.0.0release notes

  • The use_content_defined_chunking option is explicitly exposed on ParquetWriter.

    26.0.0release notes

  • Python exposes RecordBatchFileReader.count_rows for counting rows in a record batch file.

    26.0.0release notes

  • Python exposes the record_batch_reader_source Acero node.

    26.0.0release notes

  • A search sorted compute kernel is added for Python and C++.

    26.0.0release notes

  • The use_content_defined_chunking option is explicitly exposed on write_table.

    26.0.0release notes

  • Python exposes the CSV writer's eol option so developers can configure the line ending.

    26.0.0release notes

  • Python exposes the CSV writer's null_string option so developers can configure how nulls are written.

    26.0.0release notes

Behavior and default changes 4

  • The CSV reader can pad rows that are missing trailing fields.

    26.0.0release notes

  • PyArrow moves to DLPack 1.3.

    26.0.0release notes

  • Parquet reading tolerates unrecognized logical and physical type combinations.

    26.0.0release notes

  • Python slice methods now accept Arrow integer scalars.

    26.0.0release notes

Tooling 1

  • PyArrow packaging adds support for Python 3.15.

    26.0.0release notes

Fixes and other changes 27

  • The CSV parse delimiter is propagated to write options.

    26.0.0release notes

  • Fixes parsing rows containing an embedded NUL byte.

    26.0.0release notes

  • Fixes the default start value for floating-point types in cumulative_max and cumulative_min.

    26.0.0release notes

  • Fixes filtering Arrow Datasets with a date expression on the right-hand side.

    26.0.0release notes

  • Fixes a correctness error in the decimal round_binary kernel.

    26.0.0release notes

  • Parquet reading now supports fixed size list arrays with nulls.

    26.0.0release notes

  • Breaks a reference cycle between the C++ server base and Python object to avoid leaking the server.

    26.0.0release notes

  • Fixes incorrect values when reading a Parquet file with a Float16 column.

    26.0.0release notes

  • Deleting a key returns IndexError instead of crashing when the key is missing.

    26.0.0release notes

  • Fixes incorrect new column names when using mutate with if_any.

    26.0.0release notes

  • Fixes pivot_wider when group ids are non-monotonic.

    26.0.0release notes

  • Fixes unification of nested uint64 fields inside a Struct array across record batches.

    26.0.0release notes

  • Fixes unification of nested Enum fields inside a Struct array across record batches.

    26.0.0release notes

  • Rejects read-only destinations.

    26.0.0release notes

  • Argument names in a schema supplied as in_type are no longer ignored.

    26.0.0release notes

  • Calling resize on an unopened object raises an exception instead of crashing.

    26.0.0release notes

  • Run-end encoded values now support struct, list view, large list view, and map types.

    26.0.0release notes

  • S3 filesystem metadata now supports Content-Encoding.

    26.0.0release notes

  • Scalar and Array arithmetic dunders return NotImplemented for unsupported types.

    26.0.0release notes

  • Initializes output for empty select_k inputs.

    26.0.0release notes

  • Adds Substrait mappings for starts_with, ends_with, and match_substring.

    26.0.0release notes

  • R str_replace() now matches base/stringr semantics when the replacement is NA.

    26.0.0release notes

  • Fixes Table.from_struct_array for an empty ChunkedArray.

    26.0.0release notes

  • Writing with TeeNode now preserves order.

    26.0.0release notes

  • Building from values now preserves unsigned dictionary index types.

    26.0.0release notes

  • UUID extension type round-trips to pandas as UUID values rather than bytes.

    26.0.0release notes

  • Validity kernels now handle logical nulls.

    26.0.0release notes

pyarrow 2519 changes

Breaking changes 1

  • Reading a single Parquet file no longer adds partition columns from its file path.

    25.0.0release notes

Deprecations 2

New APIs and options 6

  • An optional default_column_type parameter was introduced for column type selection.

    25.0.0release notes

  • Lists of multidimensional arrays can now be converted to FixedShapeTensor.

    25.0.0release notes

  • A hypot compute kernel was added.

    25.0.0release notes

  • pa.OSFile now supports raw file descriptors.

    25.0.0release notes

  • A direct key encryption/decryption API was added for Python Parquet use.

    25.0.0release notes

  • Conversion of a Table to an Arrow Tensor was added.

    25.0.0release notes

Performance 1

  • Converts arrays to Python objects without creating per-element Scalars.

    25.0.1release notes

Fixes and other changes 9

  • Fixes a SIGSEGV when libarrow is first loaded on a non-main thread that exits.

    25.0.1release notes

  • Fixes silent incorrect values when decoding a double column on aarch64 SVE.

    25.0.1release notes

  • Bloom filter length metadata is now exposed to Python in column chunk metadata.

    25.0.0release notes

  • Bloom filter offset metadata is now exposed to Python in column chunk metadata.

    25.0.0release notes

  • When a pandas DataFrame already contains an __index_level_i__ column, the index level is bumped once.

    25.0.0release notes

  • list_ storage no longer crashes when values exceed int32 offsets.

    25.0.0release notes

  • read_schema now supports extension types.

    25.0.0release notes

  • Inconsistent default values for Parquet pre_buffer were fixed.

    25.0.0release notes

  • Converting a timezone-aware Categorical to an Arrow array no longer drops its timezone.

    25.0.0release notes

pyarrow 231 changes

Security 1

  • Apache Arrow: Potential use-after-free when reading IPC file with pre-buffering

    23.0.1security advisory