Skip to content

Commit 19ffe3d

Browse files
committed
BUG: Fix strange behaviour of Series.iloc on MultiIndex Series (#17148)
1 parent 95f4f7d commit 19ffe3d

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

doc/source/whatsnew/v0.21.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ Indexing
329329
- Fixes ``DataFrame.loc`` for setting with alignment and tz-aware ``DatetimeIndex`` (:issue:`16889`)
330330
- Avoids ``IndexError`` when passing an Index or Series to ``.iloc`` with older numpy (:issue:`17193`)
331331
- Allow unicode empty strings as placeholders in multilevel columns in Python 2 (:issue:`17099`)
332+
- Bug ``Series`` with ``MultiIndex`` gives surprising ``.iloc`` results when an integer indexer is used (:issue: `17148`)
332333

333334
I/O
334335
^^^

pandas/core/indexing.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import textwrap
33
import warnings
44
import numpy as np
5+
import numbers
56
from pandas.compat import range, zip
67
import pandas.compat as compat
78
from pandas.core.dtypes.generic import ABCDataFrame, ABCPanel, ABCSeries
@@ -146,7 +147,8 @@ def _get_setitem_indexer(self, key):
146147
return self._convert_tuple(key, is_setter=True)
147148

148149
axis = self.obj._get_axis(0)
149-
if isinstance(axis, MultiIndex):
150+
151+
if isinstance(axis, MultiIndex) and not isinstance(key, int):
150152
try:
151153
return axis.get_loc(key)
152154
except Exception:

pandas/tests/indexing/test_iloc.py

+8
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,14 @@ def test_iloc_setitem(self):
269269
expected = Series([0, 1, 0], index=[4, 5, 6])
270270
tm.assert_series_equal(s, expected)
271271

272+
df = pd.DataFrame(data=[[1, 2, 5], [1, 3, 6]], columns=['i', 'j', 'k'])
273+
df.set_index(['i', 'j'], inplace=True)
274+
s = df.k.copy()
275+
s.iloc[1] = 1
276+
df.values[1][0] = 1
277+
expected = df.k
278+
tm.assert_series_equal(s, expected)
279+
272280
def test_iloc_setitem_list(self):
273281

274282
# setitem with an iloc list

0 commit comments

Comments
 (0)