Pandas 系列 any() 与 all()

Pandas Series any() vs all()

>>> s = pd.Series([float('nan')])
>>> s.any()
False
>>> s.all()
True

是不是很奇怪? any (Return whether any element is True over requested axis) and all(Return 是否所有元素在请求的轴上都为真)的文档类似,但行为差异对我来说似乎没有意义。

什么给了?

这似乎是 pandas 通常如何忽略 NaN 的问题,除非被告知不要这样做:

>>> pd.Series([float('nan')]).any()
False
>>> pd.Series([float('nan')]).all()
True
>>> pd.Series([float('nan')]).any(skipna=False)
True
>>> 

注意,NaN 是错误的:

>>> bool(float('nan'))
True

另请注意:这与内置的anyall一致。 all 的空迭代 return TrueanyFalseHere is a relevant question on that topic.

有趣的是,默认行为似乎与文档不一致:

skipna : boolean, default True Exclude NA/null values. If an entire row/column is NA, the result will be NA

但观察:

>>> pd.Series([float('nan')]).any(skipna=None)
False
>>> pd.Series([float('nan')]).any(skipna=True)
False
>>> pd.Series([float('nan')]).any(skipna=False)
True
>>>