与任何pd数据帧不一致

时间:2017-12-16 19:00:51

标签: python pandas any

其他论坛也提到过这个问题,但重点是关注。

我有一个简单的数据框:

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

我很难理解任何和所有的工作。根据熊猫文件'任何'返回" ...是否有任何元素在请求的轴上为True"。

如果我使用:

~(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

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

2 个答案:

答案 0 :(得分:3)

您需要一个let testNumbers = [1,1,2,3,4,5,2] let nondupicate = testNumbers.reduce(into: [Int]()) { if !$0.contains($1) { $0.append($1) } else { print("Found dupicate: \($1)") } } 因为运营商的优先级:

()

由于:

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

答案 1 :(得分:2)

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