From 6f38159b199abc4dde415315f3059d69a4ead15d Mon Sep 17 00:00:00 2001 From: pradeepb2505 Date: Sun, 18 Aug 2019 00:14:59 -0500 Subject: [PATCH 1/4] Solved issue #27482 --- pandas/core/dtypes/missing.py | 54 +++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/pandas/core/dtypes/missing.py b/pandas/core/dtypes/missing.py index 6f599a6be6021..b7ce8412a3cc9 100644 --- a/pandas/core/dtypes/missing.py +++ b/pandas/core/dtypes/missing.py @@ -128,31 +128,35 @@ def isna(obj): def _isna_new(obj): - if is_scalar(obj): - return libmissing.checknull(obj) - # hack (for now) because MI registers as ndarray - elif isinstance(obj, ABCMultiIndex): - raise NotImplementedError("isna is not defined for MultiIndex") - elif isinstance( - obj, - ( - ABCSeries, - np.ndarray, - ABCIndexClass, - ABCExtensionArray, - ABCDatetimeArray, - ABCTimedeltaArray, - ), - ): - return _isna_ndarraylike(obj) - elif isinstance(obj, ABCGeneric): - return obj._constructor(obj._data.isna(func=isna)) - elif isinstance(obj, list): - return _isna_ndarraylike(np.asarray(obj, dtype=object)) - elif hasattr(obj, "__array__"): - return _isna_ndarraylike(np.asarray(obj)) - else: - return obj is None + try: + if obj._data is None: + return False + except: + if is_scalar(obj): + return libmissing.checknull(obj) + # hack (for now) because MI registers as ndarray + elif isinstance(obj, ABCMultiIndex): + raise NotImplementedError("isna is not defined for MultiIndex") + elif isinstance( + obj, + ( + ABCSeries, + np.ndarray, + ABCIndexClass, + ABCExtensionArray, + ABCDatetimeArray, + ABCTimedeltaArray, + ), + ): + return _isna_ndarraylike(obj) + elif isinstance(obj, ABCGeneric): + return obj._constructor(obj._data.isna(func=isna)) + elif isinstance(obj, list): + return _isna_ndarraylike(np.asarray(obj, dtype=object)) + elif hasattr(obj, "__array__"): + return _isna_ndarraylike(np.asarray(obj)) + else: + return obj is None def _isna_old(obj): From 7ef817f6258f0f2a60b9c172f4da93866563e09b Mon Sep 17 00:00:00 2001 From: pradeepb2505 Date: Sun, 18 Aug 2019 00:23:30 -0500 Subject: [PATCH 2/4] Solved issue #27482 --- pandas/core/dtypes/missing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/dtypes/missing.py b/pandas/core/dtypes/missing.py index b7ce8412a3cc9..aff2ddd9db1ea 100644 --- a/pandas/core/dtypes/missing.py +++ b/pandas/core/dtypes/missing.py @@ -131,7 +131,7 @@ def _isna_new(obj): try: if obj._data is None: return False - except: + except Exception: if is_scalar(obj): return libmissing.checknull(obj) # hack (for now) because MI registers as ndarray From 5fc371abd253b665e386328687511ff3b5e8104e Mon Sep 17 00:00:00 2001 From: pradeepb2505 Date: Sun, 18 Aug 2019 11:28:15 -0500 Subject: [PATCH 3/4] Added test files, solved issue #27482 --- doc/source/whatsnew/v0.25.1.rst | 2 +- pandas/core/dtypes/missing.py | 57 ++++++++++++++++----------------- scripts/tests/test_27482.py | 19 +++++++++++ 3 files changed, 48 insertions(+), 30 deletions(-) create mode 100644 scripts/tests/test_27482.py diff --git a/doc/source/whatsnew/v0.25.1.rst b/doc/source/whatsnew/v0.25.1.rst index 34b149a6b8261..58eb83b7d57ae 100644 --- a/doc/source/whatsnew/v0.25.1.rst +++ b/doc/source/whatsnew/v0.25.1.rst @@ -89,7 +89,7 @@ Indexing Missing ^^^^^^^ -- +- Fixed bug where object with no data attribute were not being caught (:issue:`27482`) - - diff --git a/pandas/core/dtypes/missing.py b/pandas/core/dtypes/missing.py index aff2ddd9db1ea..2bca26debdfcf 100644 --- a/pandas/core/dtypes/missing.py +++ b/pandas/core/dtypes/missing.py @@ -128,35 +128,34 @@ def isna(obj): def _isna_new(obj): - try: - if obj._data is None: - return False - except Exception: - if is_scalar(obj): - return libmissing.checknull(obj) - # hack (for now) because MI registers as ndarray - elif isinstance(obj, ABCMultiIndex): - raise NotImplementedError("isna is not defined for MultiIndex") - elif isinstance( - obj, - ( - ABCSeries, - np.ndarray, - ABCIndexClass, - ABCExtensionArray, - ABCDatetimeArray, - ABCTimedeltaArray, - ), - ): - return _isna_ndarraylike(obj) - elif isinstance(obj, ABCGeneric): - return obj._constructor(obj._data.isna(func=isna)) - elif isinstance(obj, list): - return _isna_ndarraylike(np.asarray(obj, dtype=object)) - elif hasattr(obj, "__array__"): - return _isna_ndarraylike(np.asarray(obj)) - else: - return obj is None + if isinstance(obj,type): + return False + if is_scalar(obj): + return libmissing.checknull(obj) + # hack (for now) because MI registers as ndarray + elif isinstance(obj, ABCMultiIndex): + raise NotImplementedError("isna is not defined for MultiIndex") + elif isinstance( + obj, + ( + ABCSeries, + np.ndarray, + ABCIndexClass, + ABCExtensionArray, + ABCDatetimeArray, + ABCTimedeltaArray, + ), + ): + return _isna_ndarraylike(obj) + elif isinstance(obj, ABCGeneric): + return obj._constructor(obj._data.isna(func=isna)) + elif isinstance(obj, list): + print("List") + return _isna_ndarraylike(np.asarray(obj, dtype=object)) + elif hasattr(obj, "__array__"): + return _isna_ndarraylike(np.asarray(obj)) + else: + return obj is None def _isna_old(obj): diff --git a/scripts/tests/test_27482.py b/scripts/tests/test_27482.py new file mode 100644 index 0000000000000..e3b637728505b --- /dev/null +++ b/scripts/tests/test_27482.py @@ -0,0 +1,19 @@ +import pandas as pd +import pytest +import unittest + +class TestStringMethods(unittest.TestCase): + + def test1(self): + x = pd.Series([1,2,3,4]) + xt = type(x) + assert pd.isnull(xt)==False,"Passed" + + def test2(self): + y = pd.DataFrame({"col": [1,2,3,4]}) + yt = type(y) + assert pd.isnull(yt)==False,"Passed" + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file From 380f2c0926fdbd969be928899cd74ecf2eb63b87 Mon Sep 17 00:00:00 2001 From: pradeepb2505 Date: Sun, 18 Aug 2019 11:37:06 -0500 Subject: [PATCH 4/4] Removed print --- pandas/core/dtypes/missing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/core/dtypes/missing.py b/pandas/core/dtypes/missing.py index 2bca26debdfcf..14ef46cf44cc6 100644 --- a/pandas/core/dtypes/missing.py +++ b/pandas/core/dtypes/missing.py @@ -150,7 +150,6 @@ def _isna_new(obj): elif isinstance(obj, ABCGeneric): return obj._constructor(obj._data.isna(func=isna)) elif isinstance(obj, list): - print("List") return _isna_ndarraylike(np.asarray(obj, dtype=object)) elif hasattr(obj, "__array__"): return _isna_ndarraylike(np.asarray(obj))