From 6b5bd715ce26e426e1f6659382b7142ca27291e7 Mon Sep 17 00:00:00 2001 From: ri938 Date: Tue, 4 Jul 2017 17:56:30 +0100 Subject: [PATCH] BUG: get_indexer_not_unique inconsistent return types vs get_indexer #16819 --- doc/source/whatsnew/v0.21.0.txt | 1 + pandas/core/indexes/base.py | 2 +- pandas/tests/indexes/test_base.py | 11 +++++++++++ pandas/tests/indexes/test_category.py | 3 +-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/doc/source/whatsnew/v0.21.0.txt b/doc/source/whatsnew/v0.21.0.txt index de2516d75040b..4e9dbe1b32ee5 100644 --- a/doc/source/whatsnew/v0.21.0.txt +++ b/doc/source/whatsnew/v0.21.0.txt @@ -91,6 +91,7 @@ Performance Improvements Bug Fixes ~~~~~~~~~ +- Bug in get_indexer_non_unique inconsistent return type with get_indexer (:issue:`16819`) Conversion ^^^^^^^^^^ diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 695f9f119baa2..91ff308579146 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -2704,7 +2704,7 @@ def get_indexer_non_unique(self, target): tgt_values = target._values indexer, missing = self._engine.get_indexer_non_unique(tgt_values) - return Index(indexer), missing + return indexer, missing def get_indexer_for(self, target, **kwargs): """ diff --git a/pandas/tests/indexes/test_base.py b/pandas/tests/indexes/test_base.py index 18dbe6624008a..7a81a125467d5 100644 --- a/pandas/tests/indexes/test_base.py +++ b/pandas/tests/indexes/test_base.py @@ -1131,6 +1131,17 @@ def test_get_indexer_strings(self): with pytest.raises(TypeError): idx.get_indexer(['a', 'b', 'c', 'd'], method='pad', tolerance=2) + def test_get_indexer_consistency(self): + # See GH 16819 + for name, index in self.indices.items(): + indexer = index.get_indexer(index[0:2]) + assert isinstance(indexer, np.ndarray) + assert indexer.dtype == np.intp + + indexer, _ = index.get_indexer_non_unique(index[0:2]) + assert isinstance(indexer, np.ndarray) + assert indexer.dtype == np.intp + def test_get_loc(self): idx = pd.Index([0, 1, 2]) all_methods = [None, 'pad', 'backfill', 'nearest'] diff --git a/pandas/tests/indexes/test_category.py b/pandas/tests/indexes/test_category.py index 139ec49542abe..c6bfae2804adc 100644 --- a/pandas/tests/indexes/test_category.py +++ b/pandas/tests/indexes/test_category.py @@ -386,8 +386,7 @@ def test_reindexing(self): expected = oidx.get_indexer_non_unique(finder)[0] actual = ci.get_indexer(finder) - tm.assert_numpy_array_equal( - expected.values, actual, check_dtype=False) + tm.assert_numpy_array_equal(expected, actual, check_dtype=True) def test_reindex_dtype(self): c = CategoricalIndex(['a', 'b', 'c', 'a'])