diff --git a/pandas/core/dtypes/cast.py b/pandas/core/dtypes/cast.py index 5801384bf8db9..7e3e9432be6ee 100644 --- a/pandas/core/dtypes/cast.py +++ b/pandas/core/dtypes/cast.py @@ -375,7 +375,9 @@ def maybe_promote(dtype, fill_value=np.nan): if issubclass(dtype.type, np.bool_): dtype = np.object_ elif issubclass(dtype.type, np.integer): - dtype = np.float64 + dtype = np.dtype(np.float64) + if not isna(fill_value): + fill_value = dtype.type(fill_value) elif is_bool(fill_value): if not issubclass(dtype.type, np.bool_): dtype = np.object_ diff --git a/pandas/tests/dtypes/cast/test_promote.py b/pandas/tests/dtypes/cast/test_promote.py index 7acff3477ce0f..53eb07c8ec80b 100644 --- a/pandas/tests/dtypes/cast/test_promote.py +++ b/pandas/tests/dtypes/cast/test_promote.py @@ -175,9 +175,6 @@ def test_maybe_promote_int_with_float(any_int_dtype, float_dtype, box): fill_dtype = np.dtype(float_dtype) boxed, box_dtype = box # read from parametrized fixture - if float_dtype == "float32" and not boxed: - pytest.xfail("falsely upcasts to float64") - # create array of given dtype; casts "1" to correct dtype fill_value = np.array([1], dtype=fill_dtype)[0]