From 5a66b7d7f30143bee036c4fecf6af22b9ed1ae37 Mon Sep 17 00:00:00 2001 From: gfyoung Date: Mon, 22 Feb 2016 07:11:16 +0000 Subject: [PATCH] MAINT: More informative TypeError for IndexEngine.get_loc Closes gh-12218. --- pandas/index.pyx | 2 +- pandas/tests/frame/test_indexing.py | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/pandas/index.pyx b/pandas/index.pyx index a7e613ee867c7..dad2b26e13412 100644 --- a/pandas/index.pyx +++ b/pandas/index.pyx @@ -136,7 +136,7 @@ cdef class IndexEngine: cpdef get_loc(self, object val): if is_definitely_invalid_key(val): - raise TypeError + raise TypeError("'{val}' is an invalid key".format(val=val)) if self.over_size_threshold and self.is_monotonic_increasing: if not self.is_unique: diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index 7c5ec8f35bf44..43509857c8f70 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -2590,3 +2590,30 @@ def test_head_tail(self): empty_df = DataFrame() assert_frame_equal(empty_df.tail(), empty_df) assert_frame_equal(empty_df.head(), empty_df) + + def test_type_error_multiindex(self): + # See gh-12218 + df = DataFrame(columns=['i', 'c', 'x', 'y'], + data=[[0, 0, 1, 2], [1, 0, 3, 4], + [0, 1, 1, 2], [1, 1, 3, 4]]) + dg = df.pivot_table(index='i', columns='c', + values=['x', 'y']) + + with assertRaisesRegexp(TypeError, "is an invalid key"): + str(dg[:, 0]) + + index = Index(range(2), name='i') + columns = MultiIndex(levels=[['x', 'y'], [0, 1]], + labels=[[0, 1], [0, 0]], + names=[None, 'c']) + expected = DataFrame([[1, 2], [3, 4]], columns=columns, index=index) + + result = dg.loc[:, (slice(None), 0)] + assert_frame_equal(result, expected) + + name = ('x', 0) + index = Index(range(2), name='i') + expected = Series([1, 3], index=index, name=name) + + result = dg['x', 0] + assert_series_equal(result, expected)