Skip to content

Commit fef84f4

Browse files
authored
BUG: setitem with boolean mask and series as value is broken for Series with EA type (#37676)
1 parent ee984c1 commit fef84f4

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

pandas/conftest.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,6 +1143,26 @@ def any_nullable_int_dtype(request):
11431143
return request.param
11441144

11451145

1146+
@pytest.fixture(params=tm.ALL_EA_INT_DTYPES + tm.FLOAT_EA_DTYPES)
1147+
def any_numeric_dtype(request):
1148+
"""
1149+
Parameterized fixture for any nullable integer dtype and
1150+
any float ea dtypes.
1151+
1152+
* 'UInt8'
1153+
* 'Int8'
1154+
* 'UInt16'
1155+
* 'Int16'
1156+
* 'UInt32'
1157+
* 'Int32'
1158+
* 'UInt64'
1159+
* 'Int64'
1160+
* 'Float32'
1161+
* 'Float64'
1162+
"""
1163+
return request.param
1164+
1165+
11461166
@pytest.fixture(params=tm.SIGNED_EA_INT_DTYPES)
11471167
def any_signed_nullable_int_dtype(request):
11481168
"""

pandas/tests/series/indexing/test_setitem.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,22 @@ def test_setitem_boolean_td64_values_cast_na(self, value):
144144
expected = Series([NaT, 1, 2], dtype="timedelta64[ns]")
145145
tm.assert_series_equal(series, expected)
146146

147+
def test_setitem_boolean_nullable_int_types(self, any_numeric_dtype):
148+
# GH: 26468
149+
ser = Series([5, 6, 7, 8], dtype=any_numeric_dtype)
150+
ser[ser > 6] = Series(range(4), dtype=any_numeric_dtype)
151+
expected = Series([5, 6, 2, 3], dtype=any_numeric_dtype)
152+
tm.assert_series_equal(ser, expected)
153+
154+
ser = Series([5, 6, 7, 8], dtype=any_numeric_dtype)
155+
ser.loc[ser > 6] = Series(range(4), dtype=any_numeric_dtype)
156+
tm.assert_series_equal(ser, expected)
157+
158+
ser = Series([5, 6, 7, 8], dtype=any_numeric_dtype)
159+
loc_ser = Series(range(4), dtype=any_numeric_dtype)
160+
ser.loc[ser > 6] = loc_ser.loc[loc_ser > 1]
161+
tm.assert_series_equal(ser, expected)
162+
147163

148164
class TestSetitemViewCopySemantics:
149165
def test_setitem_invalidates_datetime_index_freq(self):

0 commit comments

Comments
 (0)