diff --git a/pandas/core/common.py b/pandas/core/common.py index 2bf925466e176..f4dcbc20dc5fd 100644 --- a/pandas/core/common.py +++ b/pandas/core/common.py @@ -240,7 +240,8 @@ def asarray_tuplesafe(values, dtype: NpDtype | None = None) -> np.ndarray: if issubclass(result.dtype.type, str): result = np.asarray(values, dtype=object) - if result.ndim == 2: + # For ndim > 2 distinguish between nested tuples and multidimensional arrays + if result.ndim == 2 or (result.ndim > 2 and isinstance(values[0][0], tuple)): # Avoid building an array of arrays: values = [tuple(x) for x in values] result = construct_1d_object_array_from_listlike(values) diff --git a/pandas/tests/frame/indexing/test_getitem.py b/pandas/tests/frame/indexing/test_getitem.py index 3028a433f2dae..03c61b44058d9 100644 --- a/pandas/tests/frame/indexing/test_getitem.py +++ b/pandas/tests/frame/indexing/test_getitem.py @@ -160,6 +160,15 @@ def test_getitem_iloc_two_dimensional_generator(self): expected = Series([5, 6], name="b", index=[1, 2]) tm.assert_series_equal(result, expected) + def test_getitem_key_nested_tuple(self): + # GH 43780 + df = DataFrame([[0, 0]], columns=Index([(("a",), (1,)), (("b",), (2,))])) + key_list = [df.columns[0]] + result = df[key_list] + + expected = DataFrame([0], columns=Index(key_list)) + tm.assert_frame_equal(result, expected) + class TestGetitemCallable: def test_getitem_callable(self, float_frame):