我有一个pandas数据框,其中一列有一些缺失值。
数据框由数百行组成,但在第4列中,其中五个值为?
。
我想在此列中删除值为?
的行。
我尝试过使用类似
的内容df = df[np.isfinite(df[:,4])]
答案 0 :(得分:1)
要删除第4列等于?
的行,您可以选择不等于?
的数据。
# Test data
df = DataFrame({
'col0': [0, 1, 2, 3, 4],
'col1': [0, 1, 2, 3, 4],
'col2': [0, 1, 2, 3, 4],
'col3': [0, 1, 2, 3, 4],
'col4': [0, 1, 2, '?', '?']})
df.loc[df.iloc[:, 4] != '?']
col0 col1 col2 col3 col4
0 0 0 0 0 0
1 1 1 1 1 1
2 2 2 2 2 2
如果要消除第4列包含?
的行,由于必须转义?
字符并为其提供默认值False
,因此它有点棘手。 boolean indexing工作,最后是布尔否定~
。
df.loc[~df.iloc[:,4].str.contains('\?', na = False)]
col0 col1 col2 col3 col4
0 0 0 0 0 0
1 1 1 1 1 1
2 2 2 2 2 2
如果列仅包含数字,您还可以使用以下方法。使用errors
参数coerce
转换为数字,以便为无法转换的值生成NaN
。然后只需使用dropna
删除值。
df.iloc[] = pd.to_numeric(df.iloc[:,4], errors='coerce')
# Or if you want to apply the transformation to the entire DataFrame
# df = df.apply(pd.to_numeric, errors='coerce')
df.dropna(inplace=True)
col0 col1 col2 col3 col4
0 0 0 0 0 0.0
1 1 1 1 1 1.0
2 2 2 2 2 2.0