Skip to content

Commit cfcade2

Browse files
committed
Merge pull request #5737 from jreback/mi_index2
BUG: raise KeyError if missing value in py3 on multi-index (GH5725), revisted
2 parents 1c1f9b4 + 29b7168 commit cfcade2

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

pandas/core/index.py

+3
Original file line numberDiff line numberDiff line change
@@ -2306,8 +2306,11 @@ def _try_mi(k):
23062306
compat.PY3 and isinstance(key, compat.string_types)):
23072307
try:
23082308
return _try_mi(key)
2309+
except (KeyError):
2310+
raise
23092311
except:
23102312
pass
2313+
23112314
try:
23122315
return _try_mi(Timestamp(key))
23132316
except:

pandas/tests/test_indexing.py

+22-1
Original file line numberDiff line numberDiff line change
@@ -844,15 +844,36 @@ def test_getitem_multiindex(self):
844844
# GH 5725
845845
# the 'A' happens to be a valid Timestamp so the doesn't raise the appropriate
846846
# error, only in PY3 of course!
847-
index = MultiIndex(levels=[['A', 'B', 'C'], [0, 26, 27, 37, 57, 67, 75, 82]],
847+
index = MultiIndex(levels=[['D', 'B', 'C'], [0, 26, 27, 37, 57, 67, 75, 82]],
848848
labels=[[0, 0, 0, 1, 2, 2, 2, 2, 2, 2], [1, 3, 4, 6, 0, 2, 2, 3, 5, 7]],
849849
names=['tag', 'day'])
850850
arr = np.random.randn(len(index),1)
851851
df = DataFrame(arr,index=index,columns=['val'])
852+
result = df.val['D']
853+
expected = Series(arr.ravel()[0:3],name='val',index=Index([26,37,57],name='day'))
854+
assert_series_equal(result,expected)
855+
856+
def f():
857+
df.val['A']
858+
self.assertRaises(KeyError, f)
859+
860+
def f():
861+
df.val['X']
862+
self.assertRaises(KeyError, f)
863+
864+
# A is treated as a special Timestamp
865+
index = MultiIndex(levels=[['A', 'B', 'C'], [0, 26, 27, 37, 57, 67, 75, 82]],
866+
labels=[[0, 0, 0, 1, 2, 2, 2, 2, 2, 2], [1, 3, 4, 6, 0, 2, 2, 3, 5, 7]],
867+
names=['tag', 'day'])
868+
df = DataFrame(arr,index=index,columns=['val'])
852869
result = df.val['A']
853870
expected = Series(arr.ravel()[0:3],name='val',index=Index([26,37,57],name='day'))
854871
assert_series_equal(result,expected)
855872

873+
def f():
874+
df.val['X']
875+
self.assertRaises(KeyError, f)
876+
856877
def test_setitem_dtype_upcast(self):
857878

858879
# GH3216

0 commit comments

Comments
 (0)