50
基本上,我正在做一些数据分析。我将数据集作为numpy.ndarray读取,并且缺少一些值(通过不在那里,可以是NaN
,或者是写成“NA
”的字符串)。如何删除numpy.ndarray中包含非数字值的所有行
我想清除包含这样的任何条目的所有行。我该如何做到这一点与numpy ndarray?
基本上,我正在做一些数据分析。我将数据集作为numpy.ndarray读取,并且缺少一些值(通过不在那里,可以是NaN
,或者是写成“NA
”的字符串)。如何删除numpy.ndarray中包含非数字值的所有行
我想清除包含这样的任何条目的所有行。我该如何做到这一点与numpy ndarray?
>>> 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
与对整个行的逻辑操作or
,~
反转True/False
和a[ ]
从原始阵列,其具有括号内True
只选择行。
真棒谢谢你。是否有可能解释这是在做什么?仍然有点新numpy :) – zebra 2012-07-12 13:52:49
@ zebra - 解释。 – eumiro 2012-07-12 13:56:04
'np.isfinite'在这种情况下也很有用,以及当你想摆脱'±Inf'值时。它不需要'〜',因为它只对有限实数返回真。 – naught101 2016-09-07 23:16:31