{"record":{"id":"5f706a65bbba6fa7","repo":"pandas-dev/pandas","slug":"only-integers-slices-ellipsis-num-5f706a","errorCode":null,"errorMessage":"only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices","messagePattern":"only integers, slices \\(`:`\\), ellipsis \\(`\\.\\.\\.`\\), numpy\\.newaxis \\(`None`\\) and integer or boolean arrays are valid indices","errorType":"exception","errorClass":"IndexError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/sparse/array.py","lineNumber":1098,"sourceCode":"                # should be shifted. NB: here we are careful to also not shift by a\n                # negative value for a case like [0, 1][-100:] where the start index\n                # should be treated like 0\n                if start > 0:\n                    sp_index -= start\n\n                # Length of our result should match applying this slice to a range\n                # of the length of our original array\n                new_len = len(range(len(self))[key])\n                new_sp_index = make_sparse_index(new_len, sp_index, self.kind)\n                return type(self)._simple_new(sp_vals, new_sp_index, self.dtype)\n            else:\n                indices = np.arange(len(self), dtype=np.int32)[key]\n                return self.take(indices)\n\n        elif not is_list_like(key):\n            # e.g. \"foo\" or 2.5\n            # exception message copied from numpy\n            raise IndexError(\n                r\"only integers, slices (`:`), ellipsis (`...`), numpy.newaxis \"\n                r\"(`None`) and integer or boolean arrays are valid indices\"\n            )\n\n        else:\n            if isinstance(key, SparseArray):\n                # NOTE: If we guarantee that SparseDType(bool)\n                # has only fill_value - true, false or nan\n                # (see GH PR 44955)\n                # we can apply mask very fast:\n                if is_bool_dtype(key):\n                    if isna(key.fill_value):\n                        return self.take(key.sp_index.indices[key.sp_values])\n                    if not key.fill_value:\n                        return self.take(key.sp_index.indices)\n                    n = len(self)\n                    mask = np.full(n, True, dtype=np.bool_)\n                    mask[key.sp_index.indices] = False","sourceCodeStart":1080,"sourceCodeEnd":1116,"githubUrl":"https://github.com/pandas-dev/pandas/blob/3b7651241d4da534b3559b60ef128e1c34f54116/pandas/core/arrays/sparse/array.py#L1080-L1116","documentation":"IndexError (message copied verbatim from numpy) raised by SparseArray.__getitem__ when the key is neither an integer, slice, tuple, nor list-like. Typical offenders are string keys ('foo') or float scalars (2.5).","triggerScenarios":"arr['foo'], arr[2.5], or any scalar key whose type is not recognized as integer or list-like.","commonSituations":"Confusing positional SparseArray indexing with label-based Series indexing; passing a float index value that should have been an int.","solutions":["Use integer positional indices: arr[int(x)].","For label access, go through pd.Series(arr, index=labels)[label].","Coerce float keys with int() when they represent valid positions."],"exampleFix":"// before\narr[2.0]  # raises\n// after\narr[int(2.0)]","handlingStrategy":"validation","validationCode":"def coerce_index_key(key):\n    if isinstance(key, float) and key.is_integer():\n        return int(key)\n    return key","typeGuard":"def is_invalid_scalar_key(key) -> bool:\n    import numbers\n    return not isinstance(key, (int, numbers.Integral, slice, tuple, list))","tryCatchPattern":"try:\n    arr[key]\nexcept IndexError as e:\n    if \"valid indices\" in str(e):\n        key = int(key)\n        out = arr[key]\n    else:\n        raise","preventionTips":["Use integer positional indices for SparseArray.","Use Series for label-based access.","Coerce float positions to int."],"tags":["sparse","indexing","type-error","getitem"],"backgroundTag":null,"analyzedSha":"3b7651241d4da534b3559b60ef128e1c34f54116","analyzedAt":"2026-08-11T22:10:44.015Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}