{"record":{"id":"52d3857574c3831e","repo":"pola-rs/polars","slug":"multi-dimensional-numpy-arrays-not-supported-as-in","errorCode":null,"errorMessage":"multi-dimensional NumPy arrays not supported as index","messagePattern":"multi-dimensional NumPy arrays not supported as index","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"py-polars/src/polars/_utils/getitem.py","lineNumber":241,"sourceCode":"        if key.is_empty():\n            return df.__class__()\n        dtype = key.dtype\n        if dtype == String:\n            return _select_columns_by_name(df, key)\n        elif dtype.is_integer():\n            return _select_columns_by_index(df, key)\n        elif dtype == Boolean:\n            return _select_columns_by_mask(df, key)\n        else:\n            msg = f\"cannot select columns using Series of type {dtype}\"\n            raise TypeError(msg)\n\n    elif _check_for_numpy(key) and isinstance(key, np.ndarray):\n        if key.ndim == 0:\n            key = np.atleast_1d(key)\n        elif key.ndim != 1:\n            msg = \"multi-dimensional NumPy arrays not supported as index\"\n            raise TypeError(msg)\n\n        if len(key) == 0:\n            return df.__class__()\n\n        dtype_kind = key.dtype.kind\n        if dtype_kind in (\"i\", \"u\"):\n            return _select_columns_by_index(df, key)\n        elif dtype_kind == \"b\":\n            return _select_columns_by_mask(df, key)\n        elif isinstance(key[0], str):\n            return _select_columns_by_name(df, key)\n        else:\n            msg = f\"cannot select columns using NumPy array of type {key.dtype}\"\n            raise TypeError(msg)\n\n    msg = (\n        f\"cannot select columns using key of type {qualified_type_name(key)!r}: {key!r}\"\n    )","sourceCodeStart":223,"sourceCodeEnd":259,"githubUrl":"https://github.com/pola-rs/polars/blob/df599052daf96e7a9cc30a3b0c6bd25d6947e3c0/py-polars/src/polars/_utils/getitem.py#L223-L259","documentation":"DataFrame.__getitem__ with a NumPy array first normalizes dimensionality: 0-d arrays are promoted with np.atleast_1d, but ndim ≥ 2 raises TypeError because a 2-D key is ambiguous between row and column selection. Only 1-D arrays can select columns.","triggerScenarios":"df[np.array([[0, 1], [2, 3]])]; keys produced by np.where on a 2-D array (returns a tuple of 2-D arrays); index matrices from train/test splitting code.","commonSituations":"np.where applied to matrices returning multi-dimensional index arrays; one-hot argmax or coordinate-pair outputs (N, 2) passed directly as selectors; forgetting that df[key] selects columns, not arbitrary cells.","solutions":["Flatten the key: df[key.ravel()] or df[key.reshape(-1)].","Take the relevant axis of a coordinate matrix: df[pairs[:, 0]].","For cell-wise access, iterate row/column pairs or use df.item(row, col)."],"exampleFix":"// before\nrows, cols = np.where(mask_2d)\nsub = df[cols]  # cols is 2-D when mask_2d had >1 row? no: use ravel for safety\n\n// after\nsub = df[np.asarray(cols).ravel()]","handlingStrategy":"validation","validationCode":"key = np.asarray(key)\nif key.ndim == 0:\n    key = np.atleast_1d(key)\nelif key.ndim != 1:\n    key = key.reshape(-1)  # or key.ravel()\nout = df[key]","typeGuard":"def is_1d_index_array(key: np.ndarray) -> bool:\n    return key.ndim == 1","tryCatchPattern":"try:\n    out = df[key]\nexcept TypeError as e:\n    if \"multi-dimensional NumPy arrays not supported\" in str(e):\n        out = df[np.asarray(key).reshape(-1)]\n    else:\n        raise","preventionTips":["Ravel index arrays from np.where/argmax pipelines before indexing.","Remember df[key] selects columns only; use df.item(r, c) for cells.","Assert key.ndim == 1 in helpers that accept user-supplied index arrays."],"tags":["numpy","dataframe","ndim","indexing"],"backgroundTag":null,"analyzedSha":"df599052daf96e7a9cc30a3b0c6bd25d6947e3c0","analyzedAt":"2026-08-16T12:10:03.978Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}