任何与所有 pd 数据帧不一致

inconsistent any vs all pd dataframe

其他论坛也有人问过这个问题,但重点是 nan。

我有一个简单的数据框:

 y=[[1,2,3,4,1],[1,2,0,4,5]]
 df = pd.DataFrame(y)

我很难理解任何和所有的工作原理。根据 pandas 文档 'any' returns“...是否有任何元素在请求的轴上为真”。

如果我使用:

~(df == 0)
Out[77]: 
    0     1      2     3     4
0  True  True   True  True  True
1  True  True  False  True  True


~(df == 0).any(1)
Out[78]: 
0     True
1    False
dtype: bool

根据我的理解,第二个命令的意思是:Return 'True' 如果任何元素在请求的轴上为真,并且它应该 return 真,两行都为真(因为两者都包含至少一个真值)但我得到的是 True,False。这是为什么?

您需要一个 () 因为运算符的优先级:

print (df == 0)
       0      1      2      3      4
0  False  False  False  False  False
1  False  False   True  False  False

print (~(df == 0))
      0     1      2     3     4
0  True  True   True  True  True
1  True  True  False  True  True

print ((~(df == 0)).any(1))
0    True
1    True
dtype: bool

因为:

print ((df == 0).any(1))
0    False
1     True
dtype: bool

print (~(df == 0).any(1))
0     True
1    False
dtype: bool

Python 将您的呼叫解释为:

~ ( (df == 0).any(1) )

所以它**首先评估 any。现在,如果我们看一下 df == 0,我们会看到:

>>> df == 0
       0      1      2      3      4
0  False  False  False  False  False
1  False  False   True  False  False

所以这意味着在第一行中没有这样的True,在第二行中有,所以:

>>> (df == 0).any(1)
0    False
1     True
dtype: bool

现在我们用 ~ 取反,所以 False 变成 True,反之亦然:

>>> ~ (df == 0).any(1)
0     True
1    False
dtype: bool

如果我们首先取反,我们会看到:

>>> (~ (df == 0)).any(1)
0    True
1    True
dtype: bool

两者都是True,因为在两行中至少有一列是True