Як видалити всі рядки в numpy.ndarray, що містять нечислові значення


95

В основному, я роблю аналіз даних. Я читав у наборі даних як numpy.ndarray, і деякі значення відсутні (або просто не там, не будучи NaN, або через рядок, написаний " NA").

Я хочу очистити всі рядки, що містять такі записи. Як це зробити за допомогою numpy ndarray?

Відповіді:


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де NaN, Falseдеінде. .any(axis=1)зменшує m*nмасив до nлогічної orоперації з усіма рядками, ~інвертує True/Falseта a[ ]вибирає лише ті рядки з вихідного масиву, які містяться Trueв дужках.


11
np.isfiniteтакож корисно в цьому випадку, а також коли ви хочете позбутися ±Infцінностей. Це не вимагає ~, оскільки воно повертає істину лише для кінцевих реальних дій.
naught101

7
@ naught101 Вам також потрібно змінити anyна all. Оскільки ви хочете виділити рядки, де "всі скінченні", замість того, щоб вибирати рядки, де "не будь-які є nan".
AnnanFay
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.