显示pandas中列为False的行

时间:2017-08-25 11:34:21

标签: python pandas dataframe

我有一个数据框,其中一列(dtype = bool)包含True / False值,如果bool列== False,我想过滤记录

下面的脚本会出错,请帮助。

if mFile['CCK'].str.contains(['False']):
    print(mFile.loc[mFile['CCK'] == False])

中的错误
if mFile['CCK'].str.contains(['False']

3 个答案:

答案 0 :(得分:3)

您不需要将值转换为字符串(str.contains),因为它已经是布尔值。事实上,因为它是一个布尔值,如果你只想保留真值,你只需要:

mFile[mFile["CCK"]]

假设mFile是一个数据帧,而CCK只包含True和False值

编辑:如果你想要假值,请使用:

mFile[~mFile["CCK"]]

答案 1 :(得分:3)

要仅在记录为False时显示,您需要反转您的条件:

mFile[~mFile['CCK']])

MVCE:

原件:

In [1273]: df
Out[1273]: 
       A    B
0  False    8
1   True   98
2   True   97
3  False  106
4  False   50
5  False   80
6  False   80
7   True   72
8  False  117
9  False   29

使用boolean indexing

In [1271]: df[~df.A].B
Out[1271]: 
0      8
3    106
4     50
5     80
6     80
8    117
9     29
Name: B, dtype: int64

您也可以使用pd.Series.mask

In [1272]: df.B.mask(df.A).dropna()
Out[1272]: 
0      8.0
3    106.0
4     50.0
5     80.0
6     80.0
8    117.0
9     29.0
Name: B, dtype: float64

如果您的数据包含字符串条目,则需要pd.Series.str.contains

In [1278]: df[df.A.astype(str).str.contains('False')]
Out[1278]: 
       A    B
0  False    8
3  False  106
4  False   50
5  False   80
6  False   80
8  False  117
9  False   29

对于你的情况,它是

mFile[mFile['CCK'].astype(str).str.contains('False') ]

要检查是否存在False-y值,只需获取掩码并调用pd.Series.any()

mFile['CCK'].astype(str).str.contains('False').any()

答案 2 :(得分:2)

怎么样:

.contains

您可以使用上面的if False in mFile['CCK']: print(mFile[~mFile['CCK']]) ~,这可能会让其他人更具可读性......