Skip to content

Commit 42ef6fd

Browse files
committed
Merge pull request #6614 from immerrr/drop-reindex-takeable-param
BUG/CLN: fix iloc when positional indexer matched Int64Index key
2 parents d870b40 + 68b1256 commit 42ef6fd

File tree

5 files changed

+22
-50
lines changed

5 files changed

+22
-50
lines changed

doc/source/release.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ Bug Fixes
231231
- Bug in fillna with method = 'bfill/ffill' and ``datetime64[ns]`` dtype (:issue:`6587`)
232232
- Bug in sql writing with mixed dtypes possibly leading to data loss (:issue:`6509`)
233233
- Bug in popping from a Series (:issue:`6600`)
234+
- Bug in ``iloc`` indexing when positional indexer matched Int64Index of corresponding axis no reordering happened (:issue:`6612`)
235+
234236

235237
pandas 0.13.1
236238
-------------

pandas/core/frame.py

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,10 +1613,8 @@ def _ixs(self, i, axis=0, copy=False):
16131613
else:
16141614
label = self.index[i]
16151615
if isinstance(label, Index):
1616-
16171616
# a location index by definition
1618-
i = _maybe_convert_indices(i, len(self._get_axis(axis)))
1619-
result = self.reindex(i, takeable=True)
1617+
result = self.take(i, axis=axis)
16201618
copy=True
16211619
else:
16221620
new_values, copy = self._data.fast_xs(i, copy=copy)
@@ -2124,41 +2122,38 @@ def lookup(self, row_labels, col_labels):
21242122
#----------------------------------------------------------------------
21252123
# Reindexing and alignment
21262124

2127-
def _reindex_axes(self, axes, level, limit, method, fill_value, copy,
2128-
takeable=False):
2125+
def _reindex_axes(self, axes, level, limit, method, fill_value, copy):
21292126
frame = self
21302127

21312128
columns = axes['columns']
21322129
if columns is not None:
21332130
frame = frame._reindex_columns(columns, copy, level, fill_value,
2134-
limit, takeable=takeable)
2131+
limit)
21352132

21362133
index = axes['index']
21372134
if index is not None:
21382135
frame = frame._reindex_index(index, method, copy, level,
2139-
fill_value, limit, takeable=takeable)
2136+
fill_value, limit)
21402137

21412138
return frame
21422139

21432140
def _reindex_index(self, new_index, method, copy, level, fill_value=NA,
2144-
limit=None, takeable=False):
2141+
limit=None):
21452142
new_index, indexer = self.index.reindex(new_index, method, level,
21462143
limit=limit,
2147-
copy_if_needed=True,
2148-
takeable=takeable)
2144+
copy_if_needed=True)
21492145
return self._reindex_with_indexers({0: [new_index, indexer]},
21502146
copy=copy, fill_value=fill_value,
2151-
allow_dups=takeable)
2147+
allow_dups=False)
21522148

21532149
def _reindex_columns(self, new_columns, copy, level, fill_value=NA,
2154-
limit=None, takeable=False):
2150+
limit=None):
21552151
new_columns, indexer = self.columns.reindex(new_columns, level=level,
21562152
limit=limit,
2157-
copy_if_needed=True,
2158-
takeable=takeable)
2153+
copy_if_needed=True)
21592154
return self._reindex_with_indexers({1: [new_columns, indexer]},
21602155
copy=copy, fill_value=fill_value,
2161-
allow_dups=takeable)
2156+
allow_dups=False)
21622157

21632158
def _reindex_multi(self, axes, copy, fill_value):
21642159
""" we are guaranteed non-Nones in the axes! """
@@ -2689,10 +2684,9 @@ def sortlevel(self, level=0, axis=0, ascending=True, inplace=False):
26892684
ax = 'index' if axis == 0 else 'columns'
26902685

26912686
if new_axis.is_unique:
2692-
d = {ax: new_axis}
2687+
return self.reindex(**{ax: new_axis})
26932688
else:
2694-
d = {ax: indexer, 'takeable': True}
2695-
return self.reindex(**d)
2689+
return self.take(indexer, axis=axis, convert=False)
26962690

26972691
if inplace:
26982692
if axis == 1:

pandas/core/generic.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1546,8 +1546,6 @@ def sort_index(self, axis=0, ascending=True):
15461546
"compatible" value
15471547
limit : int, default None
15481548
Maximum size gap to forward or backward fill
1549-
takeable : boolean, default False
1550-
treat the passed as positional values
15511549
15521550
Examples
15531551
--------
@@ -1570,7 +1568,6 @@ def reindex(self, *args, **kwargs):
15701568
copy = kwargs.get('copy', True)
15711569
limit = kwargs.get('limit')
15721570
fill_value = kwargs.get('fill_value', np.nan)
1573-
takeable = kwargs.get('takeable', False)
15741571

15751572
self._consolidate_inplace()
15761573

@@ -1591,11 +1588,9 @@ def reindex(self, *args, **kwargs):
15911588

15921589
# perform the reindex on the axes
15931590
return self._reindex_axes(axes, level, limit,
1594-
method, fill_value, copy,
1595-
takeable=takeable).__finalize__(self)
1591+
method, fill_value, copy).__finalize__(self)
15961592

1597-
def _reindex_axes(self, axes, level, limit, method, fill_value, copy,
1598-
takeable=False):
1593+
def _reindex_axes(self, axes, level, limit, method, fill_value, copy):
15991594
""" perform the reinxed for all the axes """
16001595
obj = self
16011596
for a in self._AXIS_ORDERS:
@@ -1610,13 +1605,12 @@ def _reindex_axes(self, axes, level, limit, method, fill_value, copy,
16101605
axis = self._get_axis_number(a)
16111606
ax = self._get_axis(a)
16121607
new_index, indexer = ax.reindex(
1613-
labels, level=level, limit=limit, method=method,
1614-
takeable=takeable)
1608+
labels, level=level, limit=limit, method=method)
16151609

16161610
obj = obj._reindex_with_indexers(
16171611
{axis: [new_index, indexer]}, method=method,
16181612
fill_value=fill_value, limit=limit, copy=copy,
1619-
allow_dups=takeable)
1613+
allow_dups=False)
16201614

16211615
return obj
16221616

pandas/core/index.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,7 +1308,7 @@ def _get_method(self, method):
13081308
return aliases.get(method, method)
13091309

13101310
def reindex(self, target, method=None, level=None, limit=None,
1311-
copy_if_needed=False, takeable=False):
1311+
copy_if_needed=False):
13121312
"""
13131313
For Index, simply returns the new index and the results of
13141314
get_indexer. Provided here to enable an interface that is amenable for
@@ -1336,13 +1336,6 @@ def reindex(self, target, method=None, level=None, limit=None,
13361336
target = self.copy()
13371337

13381338
else:
1339-
1340-
if takeable:
1341-
if method is not None or limit is not None:
1342-
raise ValueError("cannot do a takeable reindex with "
1343-
"with a method or limit")
1344-
return self[target], target
1345-
13461339
if self.is_unique:
13471340
indexer = self.get_indexer(target, method=method,
13481341
limit=limit)
@@ -3113,7 +3106,7 @@ def get_indexer(self, target, method=None, limit=None):
31133106
return com._ensure_platform_int(indexer)
31143107

31153108
def reindex(self, target, method=None, level=None, limit=None,
3116-
copy_if_needed=False, takeable=False):
3109+
copy_if_needed=False):
31173110
"""
31183111
Performs any necessary conversion on the input index and calls
31193112
get_indexer. This method is here so MultiIndex and an Index of
@@ -3124,10 +3117,6 @@ def reindex(self, target, method=None, level=None, limit=None,
31243117
(new_index, indexer, mask) : (MultiIndex, ndarray, ndarray)
31253118
"""
31263119

3127-
# a direct takeable
3128-
if takeable:
3129-
return self.take(target), target
3130-
31313120
if level is not None:
31323121
if method is not None:
31333122
raise TypeError('Fill method not supported if level passed')
@@ -3142,14 +3131,8 @@ def reindex(self, target, method=None, level=None, limit=None,
31423131
indexer = self.get_indexer(target, method=method,
31433132
limit=limit)
31443133
else:
3145-
if takeable:
3146-
if method is not None or limit is not None:
3147-
raise ValueError("cannot do a takeable reindex "
3148-
"with a method or limit")
3149-
return self[target], target
3150-
31513134
raise Exception(
3152-
"cannot handle a non-takeable non-unique multi-index!")
3135+
"cannot handle a non-unique multi-index!")
31533136

31543137
if not isinstance(target, MultiIndex):
31553138
if indexer is None:

pandas/core/series.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,8 +460,7 @@ def _ixs(self, i, axis=0):
460460
else:
461461
label = self.index[i]
462462
if isinstance(label, Index):
463-
i = _maybe_convert_indices(i, len(self))
464-
return self.reindex(i, takeable=True)
463+
return self.take(i, axis=axis, convert=True)
465464
else:
466465
return _index.get_value_at(self, i)
467466

0 commit comments

Comments
 (0)