SPy*_*SPy 3 python dataframe pandas
我有一个数据框,其中一列(dtype = bool)包含True/ False值,如果布尔列== False,我想过滤记录
下面的脚本给出了错误,请帮忙。
if mFile['CCK'].str.contains(['False']):
print(mFile.loc[mFile['CCK'] == False])
Run Code Online (Sandbox Code Playgroud)
错误中
if mFile['CCK'].str.contains(['False']
Run Code Online (Sandbox Code Playgroud)
要仅在记录为 时显示False,您需要反转条件:
mFile[~mFile['CCK']])
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
您还可以使用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
Run Code Online (Sandbox Code Playgroud)
如果您的数据有字符串条目,您需要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
Run Code Online (Sandbox Code Playgroud)
对于你的情况,它会是
mFile[mFile['CCK'].astype(str).str.contains('False') ]
Run Code Online (Sandbox Code Playgroud)
要检查False-y值是否存在,只需获取掩码并调用pd.Series.any():
mFile['CCK'].astype(str).str.contains('False').any()
Run Code Online (Sandbox Code Playgroud)
您无需将值转换为字符串(str.contains),因为它已经是布尔值。实际上,由于它是一个布尔值,因此,如果您只想保留真实值,则需要做的是:
mFile[mFile["CCK"]]
Run Code Online (Sandbox Code Playgroud)
假设mFile是一个数据帧,并且CCK仅包含True和False值
编辑:如果要使用假值,请使用:
mFile[~mFile["CCK"]]
Run Code Online (Sandbox Code Playgroud)