任何与所有 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
。
其他论坛也有人问过这个问题,但重点是 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
。