diff --git a/doc/source/whatsnew/v2.1.0.rst b/doc/source/whatsnew/v2.1.0.rst index c50e031c815a6..c73531f1f0e43 100644 --- a/doc/source/whatsnew/v2.1.0.rst +++ b/doc/source/whatsnew/v2.1.0.rst @@ -628,7 +628,8 @@ Numeric Conversion ^^^^^^^^^^ - Bug in :func:`DataFrame.style.to_latex` and :func:`DataFrame.style.to_html` if the DataFrame contains integers with more digits than can be represented by floating point double precision (:issue:`52272`) -- Bug in :func:`array` when given a ``datetime64`` or ``timedelta64`` dtype with unit of "s", "us", or "ms" returning :class:`PandasArray` instead of :class:`DatetimeArray` or :class:`TimedeltaArray` (:issue:`52859`) +- Bug in :func:`array` when given a ``datetime64`` or ``timedelta64`` dtype with unit of "s", "us", or "ms" returning :class:`NumpyExtensionArray` instead of :class:`DatetimeArray` or :class:`TimedeltaArray` (:issue:`52859`) +- Bug in :func:`array` when given an empty list and no dtype returning :class:`NumpyExtensionArray` instead of :class:`FloatingArray` (:issue:`54371`) - Bug in :meth:`ArrowDtype.numpy_dtype` returning nanosecond units for non-nanosecond ``pyarrow.timestamp`` and ``pyarrow.duration`` types (:issue:`51800`) - Bug in :meth:`DataFrame.__repr__` incorrectly raising a ``TypeError`` when the dtype of a column is ``np.record`` (:issue:`48526`) - Bug in :meth:`DataFrame.info` raising ``ValueError`` when ``use_numba`` is set (:issue:`51922`) diff --git a/pandas/core/construction.py b/pandas/core/construction.py index 4ce6c35244e5b..5757c69bb6ec7 100644 --- a/pandas/core/construction.py +++ b/pandas/core/construction.py @@ -350,7 +350,8 @@ def array( elif inferred_dtype == "integer": return IntegerArray._from_sequence(data, copy=copy) - + elif inferred_dtype == "empty" and not hasattr(data, "dtype") and not len(data): + return FloatingArray._from_sequence(data, copy=copy) elif ( inferred_dtype in ("floating", "mixed-integer-float") and getattr(data, "dtype", None) != np.float16 diff --git a/pandas/tests/arrays/test_array.py b/pandas/tests/arrays/test_array.py index b8b5e3588d48f..2746cd91963a0 100644 --- a/pandas/tests/arrays/test_array.py +++ b/pandas/tests/arrays/test_array.py @@ -47,6 +47,7 @@ def test_dt64_array(dtype_unit): "data, dtype, expected", [ # Basic NumPy defaults. + ([], None, FloatingArray._from_sequence([])), ([1, 2], None, IntegerArray._from_sequence([1, 2])), ([1, 2], object, NumpyExtensionArray(np.array([1, 2], dtype=object))), ( @@ -54,6 +55,11 @@ def test_dt64_array(dtype_unit): np.dtype("float32"), NumpyExtensionArray(np.array([1.0, 2.0], dtype=np.dtype("float32"))), ), + ( + np.array([], dtype=object), + None, + NumpyExtensionArray(np.array([], dtype=object)), + ), (np.array([1, 2], dtype="int64"), None, IntegerArray._from_sequence([1, 2])), ( np.array([1.0, 2.0], dtype="float64"),