Tengo una matriz de flotadores (algunos números normales, algunos nans) que salen de una aplicación en un marco de datos de pandas.
Por alguna razón, numpy.isnan está fallando en esta matriz, sin embargo, como se muestra a continuación, cada elemento es un flotante, numpy.isnan se ejecuta correctamente en cada elemento, el tipo de variable es definitivamente una matriz numpy.
¡¿Que esta pasando?!
set([type(x) for x in tester])
Out[59]: {float}
tester
Out[60]:
array([-0.7000000000000001, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan], dtype=object)
set([type(x) for x in tester])
Out[61]: {float}
np.isnan(tester)
Traceback (most recent call last):
File "<ipython-input-62-e3638605b43c>", line 1, in <module>
np.isnan(tester)
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
set([np.isnan(x) for x in tester])
Out[65]: {False, True}
type(tester)
Out[66]: numpy.ndarray
Un gran sustituto de np.isnan () y pd.isnull () es
ya que solo nan no es igual a sí mismo.
fuente
import numpy as np; a = np.array([1,2,3, np.nan])
y ejecuta tu código.Además de la respuesta de @unutbu, puede coaccionar la matriz de objetos numpy de pandas al tipo nativo (float64), algo en la línea
Especifique errors = 'coerce' para forzar cadenas que no se pueden analizar a un valor numérico para convertirse en NaN. El tipo de columna sería
dtype: float64
, y luego laisnan
verificación debería funcionarfuente
unutbu
;)fuente