Skip to content

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

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions