Skip to content

Commit bd1eebb

Browse files
gfyoungjreback
gfyoung
authored andcommitted
MAINT: More informative TypeError for IndexEngine.get_loc
Title is self-explanatory. Closes #12218. Author: gfyoung <[email protected]> Closes #12414 from gfyoung/invalid_key_inform and squashes the following commits: 5a66b7d [gfyoung] MAINT: More informative TypeError for IndexEngine.get_loc
1 parent ef6ff59 commit bd1eebb

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

pandas/index.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ cdef class IndexEngine:
136136

137137
cpdef get_loc(self, object val):
138138
if is_definitely_invalid_key(val):
139-
raise TypeError
139+
raise TypeError("'{val}' is an invalid key".format(val=val))
140140

141141
if self.over_size_threshold and self.is_monotonic_increasing:
142142
if not self.is_unique:

pandas/tests/frame/test_indexing.py

+27
Original file line numberDiff line numberDiff line change
@@ -2590,3 +2590,30 @@ def test_head_tail(self):
25902590
empty_df = DataFrame()
25912591
assert_frame_equal(empty_df.tail(), empty_df)
25922592
assert_frame_equal(empty_df.head(), empty_df)
2593+
2594+
def test_type_error_multiindex(self):
2595+
# See gh-12218
2596+
df = DataFrame(columns=['i', 'c', 'x', 'y'],
2597+
data=[[0, 0, 1, 2], [1, 0, 3, 4],
2598+
[0, 1, 1, 2], [1, 1, 3, 4]])
2599+
dg = df.pivot_table(index='i', columns='c',
2600+
values=['x', 'y'])
2601+
2602+
with assertRaisesRegexp(TypeError, "is an invalid key"):
2603+
str(dg[:, 0])
2604+
2605+
index = Index(range(2), name='i')
2606+
columns = MultiIndex(levels=[['x', 'y'], [0, 1]],
2607+
labels=[[0, 1], [0, 0]],
2608+
names=[None, 'c'])
2609+
expected = DataFrame([[1, 2], [3, 4]], columns=columns, index=index)
2610+
2611+
result = dg.loc[:, (slice(None), 0)]
2612+
assert_frame_equal(result, expected)
2613+
2614+
name = ('x', 0)
2615+
index = Index(range(2), name='i')
2616+
expected = Series([1, 3], index=index, name=name)
2617+
2618+
result = dg['x', 0]
2619+
assert_series_equal(result, expected)

0 commit comments

Comments
 (0)