不能在 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()
相同。不过,从表面上看,mask
的 intent 似乎更清晰。
你的解决方案的问题是 df_c.notnull()
给出了一个布尔 dataframe 数组,但你想通过一维数组/系列进行索引。您可以使用:
df_c = df[df != '-']
df_c = df_c[df_c.notnull().all(1)]
但这很冗长而且效率可能很低。
我得到这个数据集,当值为空时它有符号 -
起初我认为这不是问题,所以我删除了这些行:
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()
相同。不过,从表面上看,mask
的 intent 似乎更清晰。
你的解决方案的问题是 df_c.notnull()
给出了一个布尔 dataframe 数组,但你想通过一维数组/系列进行索引。您可以使用:
df_c = df[df != '-']
df_c = df_c[df_c.notnull().all(1)]
但这很冗长而且效率可能很低。