with create array python arrays numpy nan

with - create array of nan python



Eliminar valores nan de una matriz (8)

Quiero averiguar cómo eliminar los valores nan de mi matriz. Se ve algo como esto:

x = [1400, 1500, 1600, nan, nan, nan ,1700] #Not in this exact configuration

Soy relativamente nuevo en Python, así que todavía estoy aprendiendo. ¿Algun consejo?


Como se muestra por otros

x[~numpy.isnan(x)]

trabajos. Pero arrojará un error si el numpy dtype no es un tipo de datos nativo, por ejemplo, si es un objeto. En ese caso, puedes usar pandas.

x[~pandas.isnan(x)]


Haciendo lo anterior:

x = x[~numpy.isnan(x)]

o

x = x[numpy.logical_not(numpy.isnan(x))]

Descubrí que restablecer la misma variable (x) no eliminaba los valores reales de nan y tenía que usar una variable diferente. Al establecerlo en una variable diferente se eliminó el nans. p.ej

y = x[~numpy.isnan(x)]



Para mí, la respuesta de @jmetz no funcionó, sin embargo, el uso de pandas isnull () sí lo hizo.

x = x[~pd.isnull(x)]


Prueba esto:

import math print [value for value in x if not math.isnan(value)]

Para más información, lea en Comprensión de listas .


Si estás usando numpy

# first get the indices where the values are finite ii = np.isfinite(x) # second get the values x = x[ii]


Si usa Numpy para sus matrices, también puede usar

x = x[numpy.logical_not(numpy.isnan(x))]

Equivalentemente

x = x[~numpy.isnan(x)]

[Gracias a chbrown por la taquigrafía añadida]

Explicación

La función interna, numpy.isnan , devuelve una matriz booleana / lógica que tiene el valor True todas partes donde x no es un número. Como queremos lo contrario, usamos el operador lógico-no, ~ para obtener una matriz con True s en todas partes donde x es un número válido.

Por último, utilizamos esta matriz lógica para indexar en la matriz original x , para recuperar solo los valores que no son de NaN.


filter(lambda v: v==v, x)

funciona tanto para listas como para numpy array ya que v! = v solo para NaN