pandas-dev/pandas · error · ValueError
Encountered an NA value with skipna=False
Error message
Encountered an NA value with skipna=False
What it means
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.).
Source
Thrown at pandas/core/arrays/_mixins.py:220
) -> npt.NDArray[np.uint64]:
from pandas.core.util.hashing import hash_array
values = self._ndarray
return hash_array(
values, encoding=encoding, hash_key=hash_key, categorize=categorize
)
def _cast_pointwise_result(self, values: ArrayLike) -> ArrayLike:
if not (isinstance(values, np.ndarray) and values.dtype == object):
values = construct_1d_object_array_from_listlike(values) # type: ignore[arg-type]
return lib.maybe_convert_objects(values, convert_non_numeric=True)
# Signature of "argmin" incompatible with supertype "ExtensionArray"
def argmin(self, axis: AxisInt = 0, skipna: bool = True): # type: ignore[override]
# override base class by adding axis keyword
validate_bool_kwarg(skipna, "skipna")
if not skipna and self._hasna:
raise ValueError("Encountered an NA value with skipna=False")
return nargminmax(self, "argmin", axis=axis)
# Signature of "argmax" incompatible with supertype "ExtensionArray"
def argmax(self, axis: AxisInt = 0, skipna: bool = True): # type: ignore[override]
# override base class by adding axis keyword
validate_bool_kwarg(skipna, "skipna")
if not skipna and self._hasna:
raise ValueError("Encountered an NA value with skipna=False")
return nargminmax(self, "argmax", axis=axis)
def unique(self) -> Self:
new_data = unique(self._ndarray)
return self._from_backing_data(new_data)
def sort(
self,
*,
ascending: bool = True,View on GitHub (pinned to 71959b8cb9)
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.
Example fix
// before s.argmin(skipna=False) // after s.dropna().argmin()
Defensive patterns
Strategy: validation
Validate before calling
def safe_argmin(s, skipna=True):
if not skipna and s.isna().any():
raise ValueError("NA present; pass skipna=True or dropna() first")
return s.argmin(skipna=skipna) Prevention
- Check s.isna().any() before skipna=False reductions
- Default to skipna=True unless you specifically need NA enforcement
When it happens
Trigger: s.argmin(skipna=False) or df.idxmin(skipna=False) on a nullable/extension-dtype Series or column that contains nulls (NaN, NaT, pd.NA).
Common situations: Running idxmin/argmin on uncleaned data; using skipna=False intending to detect NA presence.
Related errors
- No such keys(s): {pat!r}
- {k} is not a valid identifier
- {k} is a python keyword
- Value must be an instance of {type_repr}
- Value must be one of {pp_values}
AI-assisted analysis of pandas-dev/pandas@71959b8cb9 (2026-08-07).
Data as JSON: /api/errors/c70985c75434c066.
Report an issue: GitHub.