Skip to content

Commit 6d5da02

Browse files
authored
PERF: use np.putmask instead of ndarray.__setitem__ (#37945)
1 parent d5b2094 commit 6d5da02

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

pandas/core/internals/blocks.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -1028,10 +1028,15 @@ def _putmask_simple(self, mask: np.ndarray, value: Any):
10281028
if lib.is_scalar(value) and isinstance(values, np.ndarray):
10291029
value = convert_scalar_for_putitemlike(value, values.dtype)
10301030

1031-
if is_list_like(value) and len(value) == len(values):
1032-
values[mask] = value[mask]
1031+
if self.is_extension or self.is_object:
1032+
# GH#19266 using np.putmask gives unexpected results with listlike value
1033+
if is_list_like(value) and len(value) == len(values):
1034+
values[mask] = value[mask]
1035+
else:
1036+
values[mask] = value
10331037
else:
1034-
values[mask] = value
1038+
# GH#37833 np.putmask is more performant than __setitem__
1039+
np.putmask(values, mask, value)
10351040

10361041
def putmask(
10371042
self, mask, new, inplace: bool = False, axis: int = 0, transpose: bool = False

0 commit comments

Comments
 (0)