diff --git a/doc/source/whatsnew/v0.18.0.txt b/doc/source/whatsnew/v0.18.0.txt index 733e86e38e47a..9cb0339f60cd7 100644 --- a/doc/source/whatsnew/v0.18.0.txt +++ b/doc/source/whatsnew/v0.18.0.txt @@ -345,3 +345,4 @@ Bug Fixes - Bug in ``read_sql`` with pymysql connections failing to return chunked data (:issue:`11522`) +- Bug in ``DataFrame`` when masking an empty ``DataFrame`` (:issue:`11859`) \ No newline at end of file diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 5cb31717394c6..781d4b8bddf12 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -2047,7 +2047,7 @@ def _getitem_multilevel(self, key): return self._get_item_cache(key) def _getitem_frame(self, key): - if key.values.dtype != np.bool_: + if key.values.size and not com.is_bool_dtype(key.values): raise ValueError('Must pass DataFrame with boolean values only') return self.where(key) diff --git a/pandas/tests/test_frame.py b/pandas/tests/test_frame.py index 45f528ceec02b..aa18c7826e544 100644 --- a/pandas/tests/test_frame.py +++ b/pandas/tests/test_frame.py @@ -826,6 +826,13 @@ def test_setitem_empty_frame_with_boolean(self): df[df > df2] = 47 assert_frame_equal(df, df2) + def test_getitem_empty_frame_with_boolean(self): + # Test for issue #11859 + + df = pd.DataFrame() + df2 = df[df>0] + assert_frame_equal(df, df2) + def test_delitem_corner(self): f = self.frame.copy() del f['D']