diff --git a/pandas/core/internals/managers.py b/pandas/core/internals/managers.py index ed1a9b193b3e4..47bb9c9a59e99 100644 --- a/pandas/core/internals/managers.py +++ b/pandas/core/internals/managers.py @@ -50,6 +50,7 @@ import pandas.core.algorithms as algos from pandas.core.arrays._mixins import NDArrayBackedExtensionArray +from pandas.core.arrays.arrow import ArrowDtype from pandas.core.arrays.sparse import SparseDtype import pandas.core.common as com from pandas.core.construction import ( @@ -1769,6 +1770,13 @@ def _interleave( if isinstance(dtype, SparseDtype): dtype = dtype.subtype dtype = cast(np.dtype, dtype) + elif ( + isinstance(dtype, ArrowDtype) + and dtype.numpy_dtype is not None + and dtype.numpy_dtype.kind in "fciub" + and all(blk.dtype == dtype and not blk.values._hasna for blk in self.blocks) + ): + dtype = dtype.numpy_dtype elif isinstance(dtype, ExtensionDtype): dtype = np.dtype("object") elif is_dtype_equal(dtype, str):