Skip to content

BUG/API: maybe drop recently introduced "takeable" from reindex? #6612

Closed
@immerrr

Description

@immerrr

I think there might be an issue with reindex(..., takeable=True) introduced in a recent release and you might want to consider deprecating/dropping it while it hasn't crept to user code too much.

The main reason is that reindex takeable is conceptually different from reindex: the latter can introduce new rows with values that must be filled while the former cannot. Essentially, reindex takeable is no more than a fancy indexing operation of numpy which is already available via iloc indexer. If you consider reindex parameters, you can see there' no additional value in reindex takeable:

  • method, limit & fill_value parameters are useless since no empty cells can appear
  • level parameter should be available to user via fancy multiindex slicing added recently
  • copy is also achievable via .copy() method

So not only it adds no value, but it also increases complexity:

  • externally, by adding yet another way to do fancy indexing
  • internally, by adding more code paths to follow when implementing & executing reindex

The last point has already caused a bug:

In [1]: s = pd.Series(list('abc'), index=np.arange(3)[::-1])

In [2]: s
Out[2]: 
2    a
1    b
0    c
dtype: object

In [3]: s.take([2,1,0])
Out[3]: 
0    c
1    b
2    a
dtype: object

In [4]: s.reindex([2,1,0], takeable=True)
Out[4]: 
2    a
1    b
0    c
dtype: object

In [5]: s.iloc[[2,1,0]]
Out[5]: 
2    a
1    b
0    c
dtype: object

Of course, this can be fixed by inserting workarounds here and here but this will increase complexity even more and won't address the conceptual issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    InternalsRelated to non-user accessible pandas implementation

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions