如何删除包含非数字值的numpy.ndarray中的所有行

zeb*_*bra 81 python numpy

基本上,我正在做一些数据分析.我在数据集中读取numpy.ndarray并且缺少一些值(通过不存在,存在NaN或通过写成字符串" NA").

我想清理包含这样的任何条目的所有行.我如何用numpy ndarray做到这一点?

eum*_*iro 141

>>> 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.]])
Run Code Online (Sandbox Code Playgroud)

并重新分配给a.

说明:np.isnan(a)返回一个类似的数组,True其中where NaN,where False..any(axis=1)m*n数组减少为对整行n进行逻辑or运算,~反转True/Falsea[ ]选择原始数组中的行,这些行True位于括号内.

  • `np.isfinite`在这种情况下也很有用,当你想摆脱`±Inf`值时也是如此.它不需要`~`,因为它仅对有限实数返回true. (8认同)
  • @ naught101您还需要将`any`更改为`all`。由于您要选择“全部都是有限的”行,而不是选择“所有都不是nan”的行。 (3认同)