我有一个数据框,其中一列(dtype = bool)包含True
/ False
值,如果bool列== False,我想过滤记录
下面的脚本会出错,请帮助。
if mFile['CCK'].str.contains(['False']):
print(mFile.loc[mFile['CCK'] == False])
中的错误
if mFile['CCK'].str.contains(['False']
答案 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']])
或~
,这可能会让其他人更具可读性......