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)]
La forma más simple es:
numpy.nan_to_num(x)
Documentación: https://docs.scipy.org/doc/numpy/reference/generated/numpy.nan_to_num.html
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