【发布时间】:2012-07-12 06:43:47
【问题描述】:
基本上,我正在做一些数据分析。我以 numpy.ndarray 的形式读取数据集,但其中一些值丢失(要么只是不存在,要么是 NaN,要么是写成“NA”的字符串)。
我想清除所有包含此类条目的行。如何使用 numpy ndarray 做到这一点?
【问题讨论】:
基本上,我正在做一些数据分析。我以 numpy.ndarray 的形式读取数据集,但其中一些值丢失(要么只是不存在,要么是 NaN,要么是写成“NA”的字符串)。
我想清除所有包含此类条目的行。如何使用 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括号内。
【讨论】:
np.isfinite 在这种情况下也很有用,以及当您想摆脱 ±Inf 值时。它不需要~,因为它只对有限实数返回true。
any 更改为all。由于您要选择“所有都是有限的”的行,而不是选择“不是任何都是 nan”的行。