Skip to content

Commit a0ce8ed

Browse files
committed
BUG: Raise TypeError only if key DataFrame is not empty #10126
1 parent 0aceb38 commit a0ce8ed

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

pandas/core/frame.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2151,7 +2151,7 @@ def _setitem_array(self, key, value):
21512151
def _setitem_frame(self, key, value):
21522152
# support boolean setting with DataFrame input, e.g.
21532153
# df[df > df2] = 0
2154-
if key.values.dtype != np.bool_:
2154+
if key.values.size and com.is_bool_dtype(key):
21552155
raise TypeError('Must pass DataFrame with boolean values only')
21562156

21572157
self._check_inplace_setting(value)

pandas/tests/test_frame.py

+21
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,27 @@ def test_setitem_empty(self):
794794
result.loc[result.b.isnull(), 'a'] = result.a
795795
assert_frame_equal(result, df)
796796

797+
def test_setitem_empty_frame_with_boolean(self):
798+
# Test for issue #10126
799+
df = pd.DataFrame([[2, 2]], index=pd.DatetimeIndex(['2011-01-01']))
800+
df2 = pd.DataFrame([[1, 1]], index=pd.DatetimeIndex(['2011-01-01']))
801+
802+
df[df > df2] = 47
803+
804+
expected = pd.DataFrame(
805+
[[47, 47]], index=pd.DatetimeIndex(['2011-01-01'])
806+
)
807+
assert_frame_equal(df, expected)
808+
809+
for dtype in ('float', 'int64'):
810+
for df in [
811+
pd.DataFrame(dtype=dtype),
812+
pd.DataFrame(dtype=dtype, index=[1]),
813+
pd.DataFrame(dtype=dtype, columns=['A']),
814+
]:
815+
df2 = df.copy()
816+
df[df > df2] = 47
817+
797818
def test_delitem_corner(self):
798819
f = self.frame.copy()
799820
del f['D']

0 commit comments

Comments
 (0)