{"record":{"id":"ae7e300df275526b","repo":"pandas-dev/pandas","slug":"multi-dimensional-indexing-not-allowed","errorCode":null,"errorMessage":"multi-dimensional indexing not allowed","messagePattern":"multi-dimensional indexing not allowed","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/interval.py","lineNumber":684,"sourceCode":"    @overload\n    def __getitem__(self, key: ScalarIndexer) -> IntervalOrNA: ...\n\n    @overload\n    def __getitem__(self, key: SequenceIndexer) -> Self: ...\n\n    def __getitem__(self, key: PositionalIndexer) -> Self | IntervalOrNA:\n        key = check_array_indexer(self, key)\n        left = self._left[key]\n        right = self._right[key]\n\n        if not isinstance(left, (np.ndarray, ExtensionArray)):\n            # scalar\n            if is_scalar(left) and isna(left):\n                return self._fill_value\n            return Interval(left, right, self.closed)\n        if np.ndim(left) > 1:\n            # GH#30588 multi-dimensional indexer disallowed\n            raise ValueError(\"multi-dimensional indexing not allowed\")\n        # Argument 2 to \"_simple_new\" of \"IntervalArray\" has incompatible type\n        # \"Union[Period, Timestamp, Timedelta, NaTType, DatetimeArray, TimedeltaArray,\n        # ndarray[Any, Any]]\"; expected \"Union[Union[DatetimeArray, TimedeltaArray],\n        # ndarray[Any, Any]]\"\n        result = self._simple_new(left, right, dtype=self.dtype)  # type: ignore[arg-type]\n        if getitem_returns_view(self, key):\n            result._readonly = self._readonly\n        return result\n\n    def __setitem__(self, key, value) -> None:\n        if self._readonly:\n            raise ValueError(\"Cannot modify read-only array\")\n\n        key = check_array_indexer(self, key)\n        value_left, value_right = self._validate_setitem_value(value)\n\n        self._left[key] = value_left\n        self._right[key] = value_right","sourceCodeStart":666,"sourceCodeEnd":702,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/interval.py#L666-L702","documentation":"Raised by `IntervalArray.__getitem__` when the indexer yields a 2-D result (e.g., a 2D boolean mask or nested list). IntervalArray is 1-dimensional and does not support multi-axis indexing (GH#30588). Fires at pandas/core/arrays/interval.py:684.","triggerScenarios":"`ia[np.array([[True, False], [False, True]])]`, `ia[[[0,1],[2,3]]]`, or fancy indexing that returns a 2D left/right slice.","commonSituations":"Applying a DataFrame-shaped mask to a column of intervals; reshape operations that produce 2D indexers.","solutions":["Flatten the indexer: `ia[mask.ravel()]` after reshaping the underlying data to 1D.","Operate per-column: loop or use `apply` over a 1D slice.","Use a Series of intervals with `.loc` on a flattened index instead."],"exampleFix":"// before\nia[df_bool_mask.values]  # 2D\n// after\nia[df_bool_mask.values.ravel()]","handlingStrategy":"validation","validationCode":"import numpy as np\n\ndef as_1d_indexer(idx):\n    arr = np.asarray(idx)\n    if arr.ndim > 1:\n        arr = arr.ravel()\n    return arr","typeGuard":"import numpy as np\n\ndef indexer_is_1d(idx) -> bool:\n    return np.asarray(idx).ndim <= 1","tryCatchPattern":"try:\n    sub = ia[key]\nexcept ValueError as e:\n    if \"multi-dimensional indexing\" in str(e):\n        sub = ia[np.asarray(key).ravel()]\n    else:\n        raise","preventionTips":["Flatten 2D masks before indexing an IntervalArray.","Operate per-column rather than with DataFrame-shaped masks on a single array.","Use Series-of-intervals for 2D label-driven access."],"tags":["interval","indexing","multi-dimensional"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}