diff --git a/pandas/core/index.py b/pandas/core/index.py index 81602d5240a08..da4defcecaa99 100644 --- a/pandas/core/index.py +++ b/pandas/core/index.py @@ -2133,6 +2133,12 @@ def isin(self, values): return lib.ismember_nans(self._array_values(), value_set, isnull(list(value_set)).any()) + def get_indexer(self, values, method=None, limit=None): + result = super(Float64Index, self).get_indexer(values, method=method, + limit=limit) + result[result == -1] = self._nan_idxs + return result + class MultiIndex(Index): diff --git a/pandas/tests/test_index.py b/pandas/tests/test_index.py index a8486beb57042..b7263cc96855c 100644 --- a/pandas/tests/test_index.py +++ b/pandas/tests/test_index.py @@ -1049,6 +1049,18 @@ def test_astype_from_object(self): tm.assert_equal(result.dtype, expected.dtype) tm.assert_index_equal(result, expected) + def test_get_indexer_nans(self): + index = Index([1, 2, np.nan]) + result = index.get_indexer([np.nan]) + np.testing.assert_array_equal(result, np.array([2])) + + index = Index([1, np.nan, 2, np.nan]) + with tm.assertRaisesRegexp(InvalidIndexError, 'Reindexing.*valid.*'): + index.get_indexer([np.nan]) + + index = Index([1, np.nan, 2]) + result = index.get_indexer([np.nan, np.nan]) + np.testing.assert_array_equal(result, np.array([1, 1])) class TestInt64Index(tm.TestCase): _multiprocess_can_split_ = True