Cómo eliminar todas las filas en un numpy.ndarray que contienen valores no numéricos


95

Básicamente, estoy haciendo un análisis de datos. Leí en un conjunto de datos como numpy.ndarray y faltan algunos de los valores (ya sea por no estar allí, por estar NaNo por ser una cadena escrita " NA").

Quiero limpiar todas las filas que contengan una entrada como esta. ¿Cómo hago eso con un ndarray numpy?

Respuestas:


164
>>> 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.]])

y reasignar esto a a.

Explicación: np.isnan(a)devuelve una matriz similar con Truewhere NaN, en Falseotro lugar. .any(axis=1)reduce una m*nmatriz a nuna oroperación lógica en todas las filas, ~invierte True/Falsey a[ ]elige solo las filas de la matriz original, que tienen Trueentre paréntesis.


11
np.isfinitetambién es útil en este caso, así como cuando desea deshacerse de ±Infvalores. No requiere ~, ya que devuelve verdadero solo para reales finitos.
naught101

7
@ naught101 También debes cambiar anya all. Dado que desea seleccionar filas donde "todos son finitos", en lugar de seleccionar filas donde "ninguno es nan".
AnnanFay
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.