【问题标题】:Pandas Series any() vs all()熊猫系列 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()Trueall([]) 也返回True(我也无法理解这个......)跨度>
  • 发现了这个深入研究的问题:stackoverflow.com/questions/3275058/…

标签: python pandas series


【解决方案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

另请注意:这与内置的anyall 一致。空的可迭代对象返回 True 用于 allFalse 用于 anyHere 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 是的,我正要发布那个。
  • 这似乎是不一致的,skipnaanyall 中默认为 True,所以如果 all 为 True,any 也应该为 True,不应该是吗?
  • @DennisGolomazov 不,它似乎与内置的anyall 一致。空的可迭代对象返回 True 用于 allFalse 用于 any。见讨论here
  • 嘿。是的,this 是我最喜欢的一个非常“有用”的 pandas 文档示例......
猜你喜欢
  • 2016-09-22
  • 2020-06-03
  • 2021-11-06
  • 1970-01-01
  • 2018-02-17
  • 2013-01-01
  • 2017-09-15
  • 2020-03-17
  • 2014-06-15
相关资源
最近更新 更多