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.