tutorial tablas para notebook leer instalar hacer graficar funciones espaƱol datos con como python arrays numpy pandas

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.