{"record":{"id":"3dd9817d72acd762","repo":"pandas-dev/pandas","slug":"encountered-an-na-value-with-skipna-false-3dd981","errorCode":null,"errorMessage":"Encountered an NA value with skipna=False","messagePattern":"Encountered an NA value with skipna=False","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/sparse/array.py","lineNumber":1848,"sourceCode":"        candidate = index[_candidate]\n\n        if isna(self.fill_value):\n            return candidate\n        if kind == \"argmin\" and self[candidate] < self.fill_value:\n            return candidate\n        if kind == \"argmax\" and self[candidate] > self.fill_value:\n            return candidate\n        _loc = self._first_fill_value_loc()\n        if _loc == -1:\n            # fill_value doesn't exist\n            return candidate\n        else:\n            return _loc\n\n    def argmax(self, skipna: bool = True) -> int:\n        validate_bool_kwarg(skipna, \"skipna\")\n        if not skipna and self._hasna:\n            raise ValueError(\"Encountered an NA value with skipna=False\")\n        return self._argmin_argmax(\"argmax\")\n\n    def argmin(self, skipna: bool = True) -> int:\n        validate_bool_kwarg(skipna, \"skipna\")\n        if not skipna and self._hasna:\n            raise ValueError(\"Encountered an NA value with skipna=False\")\n        return self._argmin_argmax(\"argmin\")\n\n    # ------------------------------------------------------------------------\n    # Ufuncs\n    # ------------------------------------------------------------------------\n\n    _HANDLED_TYPES = (np.ndarray, numbers.Number)\n\n    def __array_ufunc__(self, ufunc: np.ufunc, method: str, *inputs, **kwargs):\n        out = kwargs.get(\"out\", ())\n\n        for x in inputs + out:","sourceCodeStart":1830,"sourceCodeEnd":1866,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/sparse/array.py#L1830-L1866","documentation":"Raised by SparseArray.argmax when skipna=False and the array contains NA (self._hasna). Position-of-max is undefined when an NA is present and the user has opted out of skipping them, so pandas raises rather than returning a possibly-meaningless position. The check runs before _argmin_argmax to fail fast.","triggerScenarios":"pd.arrays.SparseArray([1.0, np.nan, 2.0]).argmax(skipna=False), or Series.idxmax(skipna=False) on a sparse Series with NaN fill or NaN sparse values.","commonSituations":"Calling idxmax/argmax with skipna=False expecting a 'return NaN position' semantics, or after reindexing that introduced NA fill values.","solutions":["Use the default skipna=True if NA positions are not meaningful: sparse_arr.argmax().","Pre-check: if sparse_arr._hasna: handle NA explicitly before calling argmax(skipna=False).","Drop NA first: sparse_arr.dropna().argmax(skipna=False)."],"exampleFix":"// before\npos = pd.arrays.SparseArray([1.0, np.nan, 2.0]).argmax(skipna=False)  # raises\n\n// after\npos = pd.arrays.SparseArray([1.0, np.nan, 2.0]).argmax()  # skipna=True","handlingStrategy":"validation","validationCode":"def argmax_safe(arr, skipna=True):\n    if not skipna and arr._hasna:\n        # NA present and skipna disabled: decide policy explicitly\n        raise ValueError('NA present with skipna=False; cannot compute argmax')\n    return arr.argmax(skipna=skipna)","typeGuard":"def can_argmax_skipna_false(arr) -> bool:\n    return not arr._hasna","tryCatchPattern":"try:\n    pos = arr.argmax(skipna=False)\nexcept ValueError as e:\n    if 'NA value with skipna=False' in str(e):\n        pos = arr.argmax()  # fall back to skipna=True\n    else:\n        raise","preventionTips":["Default to skipna=True for argmax on sparse arrays that may contain NA","Check arr._hasna before passing skipna=False","Drop NA explicitly with .dropna() if you need strict non-NA semantics"],"tags":["sparse","argmax","skipna","na"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}