{"record":{"id":"c70985c75434c066","repo":"pandas-dev/pandas","slug":"encountered-an-na-value-with-skipna-false","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/_mixins.py","lineNumber":220,"sourceCode":"    ) -> npt.NDArray[np.uint64]:\n        from pandas.core.util.hashing import hash_array\n\n        values = self._ndarray\n        return hash_array(\n            values, encoding=encoding, hash_key=hash_key, categorize=categorize\n        )\n\n    def _cast_pointwise_result(self, values: ArrayLike) -> ArrayLike:\n        if not (isinstance(values, np.ndarray) and values.dtype == object):\n            values = construct_1d_object_array_from_listlike(values)  # type: ignore[arg-type]\n        return lib.maybe_convert_objects(values, convert_non_numeric=True)\n\n    # Signature of \"argmin\" incompatible with supertype \"ExtensionArray\"\n    def argmin(self, axis: AxisInt = 0, skipna: bool = True):  # type: ignore[override]\n        # override base class by adding axis keyword\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 nargminmax(self, \"argmin\", axis=axis)\n\n    # Signature of \"argmax\" incompatible with supertype \"ExtensionArray\"\n    def argmax(self, axis: AxisInt = 0, skipna: bool = True):  # type: ignore[override]\n        # override base class by adding axis keyword\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 nargminmax(self, \"argmax\", axis=axis)\n\n    def unique(self) -> Self:\n        new_data = unique(self._ndarray)\n        return self._from_backing_data(new_data)\n\n    def sort(\n        self,\n        *,\n        ascending: bool = True,","sourceCodeStart":202,"sourceCodeEnd":238,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/_mixins.py#L202-L238","documentation":"Raised by NDArrayBackedExtensionArray.argmin when skipna=False and the array contains NA values. The index of the minimum is undefined in the presence of NA, so pandas refuses instead of returning a potentially misleading position. This path backs Series.argmin / DataFrame.idxmin for nullable and extension dtypes (Categorical, Period, DatetimeTZ, etc.).","triggerScenarios":"s.argmin(skipna=False) or df.idxmin(skipna=False) on a nullable/extension-dtype Series or column that contains nulls (NaN, NaT, pd.NA).","commonSituations":"Running idxmin/argmin on uncleaned data; using skipna=False intending to detect NA presence.","solutions":["Pass skipna=True (the default) to skip nulls.","Drop or fill NAs first: s.dropna().argmin().","If you need to detect NA, check s.isna().any() separately instead of relying on skipna=False to surface it."],"exampleFix":"// before\ns.argmin(skipna=False)\n// after\ns.dropna().argmin()","handlingStrategy":"validation","validationCode":"def safe_argmin(s, skipna=True):\n    if not skipna and s.isna().any():\n        raise ValueError(\"NA present; pass skipna=True or dropna() first\")\n    return s.argmin(skipna=skipna)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Check s.isna().any() before skipna=False reductions","Default to skipna=True unless you specifically need NA enforcement"],"tags":["na-handling","reductions","validation"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}