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


95

基本上,我正在做一些数据分析。我以numpy.ndarray的形式读取数据集,并且缺少某些值(要么只是不在那里NaN,要么是作为字符串写为“ NA”)。

我想清除包含这样任何条目的所有行。我该如何用一个numpy的ndarray?

Answers:


163
>>> 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,其中NaNFalse在其他地方。.any(axis=1)降低了m*n阵列n与逻辑or对整个行,操作~反相True/Falsea[ ]从原始数组只选择行,其具有True括号内。


11
np.isfinite在这种情况下,以及您希望摆脱±Inf价值时也很有用。它不需要~,因为它仅对有限实数返回true。
naught101 '09

7
@ naught101您还需要更改anyall。由于您要选择“全部都是有限的”行,而不是选择“所有都不是nan”的行。
AnnanFay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.