Skip to content

[Python] .slice methods should accept Arrow scalar types #51145

Closed

Description

@ivirshup

Describe the enhancement requested

The .slice methods take two integers as arguments, but cannot take arrow integer types.

import pyarrow as pa

a = pa.array([0, 1, 2, 3, 4, 5])

a.slice(0, 4)
# <pyarrow.lib.Int64Array object at 0x798d8fec2ce0>
# [
#   1,
#   2,
#   3,
#   4
# ]

a.slice(a[0], a[4])
# ---------------------------------------------------------------------------
# TypeError                                 Traceback (most recent call last)
# Cell In[12], line 1
# ----> 1 a.slice(a[0], a[4])
#
# File pyarrow/array.pxi:1639, in pyarrow.lib.Array.slice()
# -> 1639 'Could not get source, probably due dynamically evaluated source code.'
#
# TypeError: '<' not supported between instances of 'pyarrow.lib.Int64Scalar' and 'int'

The same is true for tables:

t = pa.Table.from_pydict({"a": a})

t.slice(a[0], a[4])
# ---------------------------------------------------------------------------
# TypeError                                 Traceback (most recent call last)
# Cell In[13], line 1
# ----> 1 t.slice(a[0], a[4])

# File pyarrow/table.pxi:4299, in pyarrow.lib.Table.slice()
# -> 4299 'Could not get source, probably due dynamically evaluated source code.'

# TypeError: '<' not supported between instances of 'pyarrow.lib.Int64Scalar' and 'int'

This is not generally true of other methods. For example, .take is fine with getting an arrow array. I can even do a[slice(a[0], a[0] + a[4])], where that slice contains pyarrow scalars.

I think it is kinda silly that if I have offsets for an arrow table in another arrow table I am having to convert those offsets to python integers (e.g. t.slice(a[0].as_py(), a[4].as_py())) or converting to indexing with a slice object.

Component(s)

Python

Activity

  1. changed the title [-][python] `.slice` methods should accept Arrow scalar types[/-] [+][Python][python] `.slice` methods should accept Arrow scalar types[/+] on Sep 3, 2026
  2. changed the title [-][Python][python] `.slice` methods should accept Arrow scalar types[/-] [+][Python] `.slice` methods should accept Arrow scalar types[/+] on Sep 3, 2026
  3. YusefSyed commented on Sep 4, 2026

    @YusefSyed
    Contributor

    take

  4. AlenkaF commented on Sep 10, 2026

    @AlenkaF
    Member

    Thanks for the issue @ivirshup
    The difference between .take and .slice is that they take two different code paths. .take goes through the compute module code path, where _pack_compute_args does the type mapping, then C++ compute functions are all called with arrow::Datum arguments. Whereas the .slice code path goes to the C++ Array::Slice which expects int64_t offset and int64_t length.

    I agree, .slice behavior could be improved on the Python side. Will look at the PR now.

  5. added a commit that references this issue on Sep 10, 2026
  6. added a commit that references this issue on Sep 25, 2026
  7. added this to the 26.0.0 milestone on Sep 25, 2026
  8. AlenkaF commented on Sep 25, 2026

    @AlenkaF
    Member

    Issue resolved by pull request 51160
    #51160

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions