我得到这个数据集,当值为空时,它有一个符号-
一开始我觉得没问题,所以放下这些行:
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
删除任何值为空(axis=0
)的行(how='any'
)。您可以根据需要修改这些参数。注:这在功能上与
df = df[df != '-'].dropna()
相同不过,从表面上看,mask
的意图似乎更为明确。您的解决方案的问题是
df_c.notnull()
提供了一个布尔数据帧数组,但您希望通过一维数组/序列进行索引。您可以使用:df_c = df[df != '-']
df_c = df_c[df_c.notnull().all(1)]
但这是冗长的,而且可能效率低下。