熊猫系列 any() vs all()
Posted
技术标签:
【中文标题】熊猫系列 any() vs all()【英文标题】:Pandas Series any() vs all() 【发布时间】:2017-02-24 10:11:01 【问题描述】:>>> s = pd.Series([float('nan')])
>>> s.any()
False
>>> s.all()
True
这不是很奇怪吗? any(返回是否有任何元素在请求的轴上为真)和all(返回是否所有元素在请求的轴上为真)的文档相似,但行为上的差异对我来说似乎没有意义。
什么给了?
【问题讨论】:
也许它实际上是在做 "no elements are false",而不是 "all elements are true",而nan
使它成为三个-重视逻辑?
@jonrsharpe,我猜在这种情况下 NaN 将被完全忽略 - 检查:pd.Series([]).any()
和 pd.Series([]).all()
是的,这可能是 pandas
默认处理 NaN 的问题。
我无法理解的是为什么:pd.Series([]).all()
给True
,all([])
也返回True
(我也无法理解这个......)跨度>
发现了这个深入研究的问题:***.com/questions/3275058/…
【参考方案1】:
这似乎是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
另请注意:这与内置的any
和all
一致。空的可迭代对象返回 True
用于 all
和 False
用于 any
。 Here is a relevant question on that topic.
有趣的是,默认行为似乎与文档不一致:
skipna : 布尔值,默认 True 排除 NA/空值。如果整行/列为 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
>>>
【讨论】:
文档中关于skipna
的内容如下:Exclude NA/null values. If an entire row/column is NA, the result will be NA
。而且它不会那样工作:pd.Series([float('nan')]).any()
返回False
,而不是NA
。
@DennisGolomazov 是的,我正要发布那个。
这似乎是不一致的,skipna
在 any
和 all
中默认为 True,所以如果 all
为 True,any
也应该为 True,不应该是吗?
@DennisGolomazov 不,它似乎与内置的any
和all
一致。空的可迭代对象返回 True
用于 all
和 False
用于 any
。见讨论here
嘿。是的,this 是我最喜欢的一个非常“有用”的 pandas 文档示例......以上是关于熊猫系列 any() vs all()的主要内容,如果未能解决你的问题,请参考以下文章