我一直在尝试读取数据框中的 CSV 文件,其中某些行中有 "?"
值。
我想在所有列中找到包含这些值(?)的行
我尝试使用 loc 但它返回一个空数据框
test_df.loc(test_df['rbc'] == "?"]
test_df.loc(test_df['rbc'] == None]
这将返回一个空的 DataFrame
我想在所有列上迭代数据框
谁能推荐一种方法来做到这一点
如果只检查所有列中的 ?
值:
df1 = df.loc[:, (df.astype(str) == '?').any()]
如果要检查所有列中所有可能的子字符串 ?
则更通用:
df2 = df.loc[:, df.apply(lambda x: x.astype(str).str.contains('\?')).any()]
编辑:
df = pd.DataFrame({'A':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,'?',2,3],
'D':['?',3,5,7,1,0],
'E':[5,3,6,9,2,'?'],
'F':list('aaabbb')})
print (df)
A B C D E F
0 a 4 7 ? 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 ? 7 9 b
4 e 5 2 1 2 b
5 f 4 3 0 ? b
您可以先创建 bool 型DataFrame
,然后检查any
每行和每列过滤:
mask = df.apply(lambda x: x.astype(str).str.contains('\?'))
df2 = df.loc[mask.any(axis=1), mask.any()]
print (df2)
C D E
0 7 ? 5
3 ? 7 9
5 3 0 ?
详细信息:
print (mask)
A B C D E F
0 False False False True False False
1 False False False False False False
2 False False False False False False
3 False False True False False False
4 False False False False False False
5 False False False False True False
print (mask.any(axis=1))
0 True
1 False
2 False
3 True
4 False
5 True
dtype: bool
print (mask.any())
A False
B False
C True
D True
E True
F False
dtype: bool
我是一名优秀的程序员,十分优秀!