我是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)
答案 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