如何找到“?”数据帧中的值

2024-05-29 03:07:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试读取数据帧中的CSV文件,其中一些行中有"?"值。你知道吗

我想找到包含这些值的行(?)在所有的柱子上

我尝试使用loc,但它返回一个空的数据帧

test_df.loc(test_df['rbc'] == "?"]
test_df.loc(test_df['rbc'] == None]

这将返回一个空的数据帧

我想在所有列上迭代数据帧

有人能建议一个方法吗


Tags: 文件csv数据方法testnonedf读取数据
2条回答

这会有用的。你知道吗

result = test_df[test_df['rbc'].str.contains("?")]

如果要只检查所有列中的?值:

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

您可以先创建布尔值DataFrame,然后检查每行和每列的^{}True以进行筛选:

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

相关问题 更多 >

    热门问题