diff --git a/pandas/core/construction.py b/pandas/core/construction.py index 5868bdaa1225b..e57338e6cc934 100644 --- a/pandas/core/construction.py +++ b/pandas/core/construction.py @@ -304,6 +304,10 @@ def array( raise ValueError(msg) elif isinstance(data, ABCDataFrame): raise TypeError("Cannot pass DataFrame to 'pandas.array'") + elif isinstance(data, (list, tuple)) and dtype == StringDtype(): + for i in data: + if isinstance(i, (np.ndarray, list, tuple)): + raise ValueError("NumpyExtensionArray must be 1-dimensional.") if dtype is None and isinstance(data, (ABCSeries, ABCIndex, ExtensionArray)): # Note: we exclude np.ndarray here, will do type inference on it diff --git a/pandas/tests/arrays/test_array.py b/pandas/tests/arrays/test_array.py index cd78dfd6f343a..293b650f601bb 100644 --- a/pandas/tests/arrays/test_array.py +++ b/pandas/tests/arrays/test_array.py @@ -451,10 +451,16 @@ def test_array_inference_fails(data): tm.assert_extension_array_equal(result, expected) -@pytest.mark.parametrize("data", [np.array(0)]) -def test_nd_raises(data): +@pytest.mark.parametrize( + "data,dtype", + [ + (np.array(0), "int64"), + ([["a"], ["b"]], pd.StringDtype()), + ], +) +def test_nd_raises(data, dtype): with pytest.raises(ValueError, match="NumpyExtensionArray must be 1-dimensional"): - pd.array(data, dtype="int64") + pd.array(data, dtype=dtype) def test_scalar_raises():