删除pandas中缺少值的行

时间:2016-09-24 13:21:58

标签: pandas numpy

我有一个pandas数据框,其中一列有一些缺失值。

数据框由数百行组成,但在第4列中,其中五个值为?

我想在此列中删除值为?的行。

我尝试过使用类似

的内容
df = df[np.isfinite(df[:,4])]

1 个答案:

答案 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