Python 如何删除numpy.ndarray中包含非数值的所有行
基本上,我在做一些数据分析。我以numpy.ndarray的形式读入数据集,其中一些值丢失(要么不存在,要么是Python 如何删除numpy.ndarray中包含非数值的所有行,python,numpy,Python,Numpy,基本上,我在做一些数据分析。我以numpy.ndarray的形式读入数据集,其中一些值丢失(要么不存在,要么是NaN,要么是一个写为“NA”的字符串) 我想清除所有包含这样的条目的行。我要怎么做呢 >>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]]) array([[ 1., 2., 3.], [ 4., 5., nan], [ 7., 8., 9.]]) >>
NaN
,要么是一个写为“NA
”的字符串)
我想清除所有包含这样的条目的行。我要怎么做呢
>>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
array([[ 1., 2., 3.],
[ 4., 5., nan],
[ 7., 8., 9.]])
>>> a[~np.isnan(a).any(axis=1)]
array([[ 1., 2., 3.],
[ 7., 8., 9.]])
并将其重新分配给a
说明:
np.isnan(a)
返回一个类似的数组,其中True
,其中NaN
,False
.any(axis=1)
通过对整行执行逻辑或操作,将m*n
数组减少为n
,~
反转真/假,a[]
仅从原始数组中选择行,在括号内有True
。np.isfinite
在这种情况下,以及当您想要去除±Inf
值时也很有用。它不需要~
,因为它只对有限实数返回true。@NOTT101您还需要将any
更改为all
。因为您希望选择“all is finite”的行,而不是选择“not any are nan”的行。