关于删除数据集中含有NaN
、inf
等异常值,有很多种方法,在stackoverflow的这个问题下,高票回答中使用的方法
df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]
在某些情况下并不可行,原因在于所使用的isin
是基于等号==
进行判断数值是否相等的,而在Python中运行np.nan == np.nan
时,结果为False
,故而在有些数据集下无法删除含有NaN
的样本(按理说应该在所有数据集下均无法删除含有NaN
的样本才对,但是在某些数据集下又能够删除,比如上述stackoverflow帖子中的情况,目前还是没有完全弄懂)。
如果一定要用类似于上述isin
的方式删除含有NaN
的样本,可以自己写一个NaN类(见参考链接3最后一个回答),用np.isnan()
来判断两个NaN
值是否相等,因为np.isnan(np.nan)
返回的是True
。具体方法如下: