Skip to content
13 changes: 11 additions & 2 deletions pandas/core/arrays/boolean.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,18 @@ def coerce_to_array(values, mask=None, copy: bool = False):
if isinstance(values, np.ndarray) and values.dtype == np.bool_:
if copy:
values = values.copy()
elif isinstance(values, np.ndarray) and values.dtype in (np.int_, np.float_):
values_copy = values.copy()

mask_values = isna(values)
values = np.zeros(len(values), dtype=bool)
values[~mask_values] = values_copy[~mask_values].astype(bool)

if not np.all(
values[~mask_values].astype(values.dtype) == values_copy[~mask_values]
):
raise TypeError("Need to pass bool-like values")
else:
# TODO conversion from integer/float ndarray can be done more efficiently
# (avoid roundtrip through object)
values_object = np.asarray(values, dtype=object)

inferred_dtype = lib.infer_dtype(values_object, skipna=True)
Expand Down