From cff543d4617e6e23c03375d1a86e3b1696afed68 Mon Sep 17 00:00:00 2001 From: fx-kirin Date: Tue, 19 Mar 2019 17:44:16 +0900 Subject: [PATCH 1/3] fix length_of_indexer to handle boolean array indexer. --- pandas/core/indexing.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 623a48acdd48b..11265a975a200 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -2443,6 +2443,8 @@ def length_of_indexer(indexer, target=None): elif step < 0: step = -step return (stop - start + step - 1) // step + elif indexer.dtype == bool: + return len(indexer[indexer]) elif isinstance(indexer, (ABCSeries, Index, np.ndarray, list)): return len(indexer) elif not is_list_like_indexer(indexer): From dc6eb9ccac7c324ada2f702a063b55c280e26293 Mon Sep 17 00:00:00 2001 From: fx-kirin Date: Tue, 19 Mar 2019 17:47:07 +0900 Subject: [PATCH 2/3] better fix --- pandas/core/indexing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 11265a975a200..679d983be9ab4 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -2443,9 +2443,9 @@ def length_of_indexer(indexer, target=None): elif step < 0: step = -step return (stop - start + step - 1) // step - elif indexer.dtype == bool: - return len(indexer[indexer]) elif isinstance(indexer, (ABCSeries, Index, np.ndarray, list)): + if indexer.dtype == bool: + return len(indexer[indexer]) return len(indexer) elif not is_list_like_indexer(indexer): return 1 From 1a6fb3d50101f4f49b22396b961b14501abab68d Mon Sep 17 00:00:00 2001 From: fx-kirin Date: Tue, 19 Mar 2019 17:49:00 +0900 Subject: [PATCH 3/3] for the case of list input --- pandas/core/indexing.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 679d983be9ab4..15a4214a6f228 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -2444,8 +2444,9 @@ def length_of_indexer(indexer, target=None): step = -step return (stop - start + step - 1) // step elif isinstance(indexer, (ABCSeries, Index, np.ndarray, list)): - if indexer.dtype == bool: - return len(indexer[indexer]) + if hasattr('dtype'): + if indexer.dtype == bool: + return len(indexer[indexer]) return len(indexer) elif not is_list_like_indexer(indexer): return 1