不能在 Python 中删除空值

Can't drop null values in Python

我得到这个数据集,当值为空时它有符号 -

起初我认为这不是问题,所以我删除了这些行:

df_c = df[df != '-']

但它实际上并没有删除行,而是用 NaN 代替了 -

然后我做了:

df_c = df_c[df_c.notnull()]

但是它不起作用,它再次返回 -。 我做错了什么?

mask + dropna

您可以使用布尔数据框进行掩码,然后使用 dropna:

df = pd.DataFrame({'A': [1, '-', '-', 4, '-'],
                   'B': ['A', 'B', '-', 'C', '-'],
                   'C': [0.5, '-', '-', 1.5, 2.5]})

df = df.mask(df == '-').dropna()

print(df)

   A  B    C
0  1  A  0.5
3  4  C  1.5

默认情况下,dropna 删除 any 值为空的行 (axis=0) (how='any')。您可以根据需要修改这些参数。

注意: 这在功能上与 df = df[df != '-'].dropna() 相同。不过,从表面上看,maskintent 似乎更清晰。


你的解决方案的问题是 df_c.notnull() 给出了一个布尔 dataframe 数组,但你想通过一维数组/系列进行索引。您可以使用:

df_c = df[df != '-']
df_c = df_c[df_c.notnull().all(1)]

但这很冗长而且效率可能很低。