Eliminar valores nulos (“nan”) en un array

publicado por: Anonymous

¿Cual sería la forma mas eficiente para reemplazar “Nan” por ceros en una gran matriz de datos numéricos en Python usando Numpy?

solución

Simplemente asigna el valor que quieras usando como máscara boleana la salida de numpy.isnan:

>>> import numpy as np

>>> a = np.array([[1, np.NaN, 2],
                  [3, 4, np.NaN],
                  [np.NaN, 9, 8]])

>>> a
array([[  1.,  nan,   2.],
       [  3.,   4.,  nan],
       [ nan,   9.,   8.]])

>>> a[np.isnan(a)] = 0      #<<<<<<<<<<<<<<<<<<
>>> a
array([[ 1.,  0.,  2.],
       [ 3.,  4.,  0.],
       [ 0.,  9.,  8.]])

En el supuesto que tus datos vengan de una lista o cualquier estructura en la que los valores NaN sean en realidad cadenas de texto (“NaN”, “Nan”, “nan”, etc), puedes usar el argumento dtype a la hora de construir el array para definir el tipo de forma explícita:

>>> import numpy as np

>>> l = [[1, "Nan", 2],
         [3, 4, "Nan"],
         ["Nan", 9, 8]]
>>> a = np.array(l, dtype = np.float)
>>> a[np.isnan(a)] = 0
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *