From 2307d221e678918e68a26b114733eec9f9e4d3a8 Mon Sep 17 00:00:00 2001 From: a1shadows Date: Wed, 15 Aug 2018 18:13:44 +0530 Subject: [PATCH 1/4] fixes #22085 --- pandas/core/indexes/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index bfa669a0ca164..51152520dae22 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -1949,6 +1949,9 @@ def __nonzero__(self): def __contains__(self, key): hash(key) try: + if type(key) == float and self.dtype == int: + if key != int(key): + return False return key in self._engine except (OverflowError, TypeError, ValueError): return False From 75506e9a117418a1f5d83593b08ace2ccc949e98 Mon Sep 17 00:00:00 2001 From: Aditya Lahiri Date: Thu, 16 Aug 2018 15:48:12 +0530 Subject: [PATCH 2/4] changes added --- pandas/core/indexes/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 51152520dae22..7886c20294d5f 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -1949,7 +1949,7 @@ def __nonzero__(self): def __contains__(self, key): hash(key) try: - if type(key) == float and self.dtype == int: + if is_float(key) and is_integer_dtype(self.dtype): if key != int(key): return False return key in self._engine From 392335d39ed08a0b5fdbf75b5dbdff2ce830d82c Mon Sep 17 00:00:00 2001 From: Aditya Lahiri Date: Thu, 16 Aug 2018 17:25:38 +0530 Subject: [PATCH 3/4] code block placed outside try statement --- pandas/core/indexes/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 7886c20294d5f..60d2bbbca5d9c 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -1948,11 +1948,11 @@ def __nonzero__(self): @Appender(_index_shared_docs['__contains__'] % _index_doc_kwargs) def __contains__(self, key): hash(key) - try: - if is_float(key) and is_integer_dtype(self.dtype): + if is_float(key) and is_integer_dtype(self.dtype): if key != int(key): return False - return key in self._engine + try: + return key in self._engine except (OverflowError, TypeError, ValueError): return False From ae5796bcfd283b7489d3809240913b61763cd644 Mon Sep 17 00:00:00 2001 From: Aditya Lahiri Date: Thu, 16 Aug 2018 17:29:50 +0530 Subject: [PATCH 4/4] minor indentation adjustment --- pandas/core/indexes/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 60d2bbbca5d9c..fb3cbfaaae6a5 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -1952,7 +1952,7 @@ def __contains__(self, key): if key != int(key): return False try: - return key in self._engine + return key in self._engine except (OverflowError, TypeError, ValueError): return False