Skip to content

API/BUG: Series[Interval].loc[int1:int2] = foo behavior #54722

Closed
@jbrockmendel

Description

@jbrockmendel
import pandas as pd

ii = pd.IntervalIndex.from_breaks(range(4, 15))
ser = pd.Series(range(10), index=ii)

ser.loc[1:3]       # <- returns empty Series
ser.loc[1:3] = 19  # <- raises TypeError

ser2 = pd.Series(range(5), index=ii[::2])

ser2.loc[5:7] = 21  # <- sets locations matching ser2.loc[5:7]
ser2.loc[6:8] = 22  # <- raises TypeError
ser2.loc[7:9] = 23  # <- sets locations matching ser2.loc[7:9]

We have special-casing for IntervalDtype in Index._convert_slice_indexer that causes the loc.__setitem__ to diverge from the loc.__getitem__ behavior in ways that I find surprising (and that are not tested or documented)

I think the simplest thing to do would be to change the raising cases to operate on the same locations that loc.__getitem__ identifies.

I would also be OK with deprecating some of IntervalIndex's partial-indexing behavior; supporting it complicates the indexing code a decent amount.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugNeeds TriageIssue that has not been reviewed by a pandas team member

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions