如果False不在熊猫系列的布尔值中

时间:2018-01-21 06:56:12

标签: python pandas if-statement boolean logic

我是python的新手,我发现很多问题都已经得到解答了。在编写各种语言的7年中,我以前从未在这里发过问题,所以这次我真的很难过。

我正在使用python 3.6

我有一个pandas数据框,其列只是布尔值。我有一些代码,如果此列中的所有行都为True,我只想执行。

在我的代码的其他地方,我使用过:

if True not in df.column:

识别df中的单行是否为True。这很好。

但由于某种原因,反过来不起作用:

if False not in df.column:

确定df中的所有行是否为True。

即使这返回False:

import pandas as pd

S = pd.Series([True, True, True])

print(False not in S)

但是我发现在系列中添加.values可以兼得:

import pandas as pd

S = pd.Series([True, True, True])

print(False not in S.values)

我能想到的另一个选择是遍历列并使用OR运算符将每一行与初始化为True的变量进行比较。然后,如果变量一直到最后为True,那么一切都必须为真。

所以我的问题是:为什么这会返回False?

import pandas as pd

S = pd.Series([True, True, True])

print(False not in S)

3 个答案:

答案 0 :(得分:1)

False not in S相当于False not in S.index。由于第一个索引元素为0(而在数值上等于False),False在技术上是in S

答案 1 :(得分:1)

当您致电s.values时,您将可以访问大熊猫系列/数据帧的numpy.array版本。

Pandas在调用isin

时提供了一个名为s.isin([False])的方法,该方法行为正确

答案 2 :(得分:1)

它并不是你所要求的,但你可以在布尔系列上使用.all()来确定所有值是否都为真。类似的东西:

if df["column_name"].all():
    #do something