{"record":{"id":"1d5e7b952f8e6dcf","repo":"pandas-dev/pandas","slug":"length-of-indexer-and-values-mismatch","errorCode":null,"errorMessage":"Length of indexer and values mismatch","messagePattern":"Length of indexer and values mismatch","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/arrow/array.py","lineNumber":2898,"sourceCode":"            ):\n                data = value\n            else:\n                data = self._if_else(True, value, self._pa_array)\n\n        elif is_integer(key):\n            # fast path\n            key = cast(\"int\", key)\n            n = len(self)\n            if key < 0:\n                key += n\n            if not 0 <= key < n:\n                raise IndexError(\n                    f\"index {key} is out of bounds for axis 0 with size {n}\"\n                )\n            if isinstance(value, pa.Scalar):\n                value = value.as_py()\n            elif is_list_like(value):\n                raise ValueError(\"Length of indexer and values mismatch\")\n            chunks = [\n                *self._pa_array[:key].chunks,\n                pa.array([value], type=self._pa_array.type, from_pandas=is_nan_na()),\n                *self._pa_array[key + 1 :].chunks,\n            ]\n            data = pa.chunked_array(chunks).combine_chunks()\n\n        elif is_bool_dtype(key):\n            key = np.asarray(key, dtype=np.bool_)\n            data = self._replace_with_mask(self._pa_array, key, value)\n\n        elif is_scalar(value) or isinstance(value, pa.Scalar):\n            mask = np.zeros(len(self), dtype=np.bool_)\n            mask[key] = True\n            data = self._if_else(mask, value, self._pa_array)\n\n        else:\n            indices = np.arange(len(self))[key]","sourceCodeStart":2880,"sourceCodeEnd":2916,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/arrow/array.py#L2880-L2916","documentation":"Raised on the integer-key setitem path when the value is list-like. Assigning to a single scalar position requires a scalar value; passing a sequence is a shape mismatch pandas rejects immediately.","triggerScenarios":"Doing `arr[k] = [a, b, c]` (k integer) — assigning a list/array to a single positional slot of an ArrowExtensionArray.","commonSituations":"Loop bugs that pass a row of values to a single index, or confusing scalar vs array assignment semantics.","solutions":["Pass a scalar: `arr[k] = scalar`.","If you intended to assign multiple, use a matching-length index array: `arr[[k1, k2, k3]] = values`.","Extract the scalar element from the sequence before assignment."],"exampleFix":"// before\narr = pd.array([1, 2, 3], dtype=\"int64[pyarrow]\")\narr[0] = [10, 20]\n\n// after\narr[[0, 1]] = [10, 20]","handlingStrategy":"type-guard","validationCode":"from pandas.api.types import is_scalar\n\ndef coerce_scalar_value(arr, k, value):\n    if not is_scalar(value):\n        raise ValueError(\"single integer index requires scalar value\")\n    return value","typeGuard":"def is_scalar_value(value) -> bool:\n    from pandas.api.types import is_scalar\n    return bool(is_scalar(value))","tryCatchPattern":"try:\n    arr[k] = value\nexcept ValueError as e:\n    if \"Length of indexer and values mismatch\" in str(e) and isinstance(value, (list, tuple)):\n        arr[[k] * len(value)] = value\n    else:\n        raise","preventionTips":["Always pass scalars to single-position integer assignment.","Use array indexers when assigning sequences.","Add unit tests covering single vs multi assignment paths."],"tags":["arrow","setitem","shape-mismatch","indexing"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}