python - tablas - Numpy isnan() falla en una matriz de flotadores(se aplican desde el marco de datos de pandas)
pandas python (3)
Además de la respuesta @unubtu, podría forzar la matriz de objetos nudosos pandas al tipo nativo (float64), algo a lo largo de la línea
import pandas as pd
pd.to_numeric(df[''tester''], errors=''coerce'')
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
isnan
check debería funcionar
Tengo una serie 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 falla en esta matriz, sin embargo, como se muestra a continuación, cada elemento es flotante, numpy.isnan se ejecuta correctamente en cada elemento, el tipo de la 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
for i in range(0,a.shape[0]):
if(a[i]!=a[i]):
//do something here
//a[i] is nan
ya que solo nan no es igual a sí mismo.
np.isnan
se puede aplicar a matrices NumPy de dtype nativo (como np.float64):
In [99]: np.isnan(np.array([np.nan, 0], dtype=np.float64))
Out[99]: array([ True, False], dtype=bool)
pero genera TypeError cuando se aplica a matrices de objetos:
In [96]: np.isnan(np.array([np.nan, 0], dtype=object))
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''''
Como tiene Pandas, puede usar
pd.isnull
en
pd.isnull
lugar; puede aceptar matrices NumPy de objetos o tipos nativos:
In [97]: pd.isnull(np.array([np.nan, 0], dtype=float))
Out[97]: array([ True, False], dtype=bool)
In [98]: pd.isnull(np.array([np.nan, 0], dtype=object))
Out[98]: array([ True, False], dtype=bool)
Tenga en cuenta que
None
también se considera un valor nulo en las matrices de objetos.