J'ai un tableau de flotteurs (certains nombres normaux, certains nans) qui sortent d'une application sur un dataframe pandas.
Pour une raison quelconque, numpy.isnan échoue sur ce tableau, mais comme indiqué ci-dessous, chaque élément est un flottant, numpy.isnan s'exécute correctement sur chaque élément, le type de la variable est définitivement un tableau numpy.
Que se passe-t-il?!
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 excellent substitut à np.isnan () et pd.isnull () est
puisque seul nan n'est pas égal à lui-même.
la source
import numpy as np; a = np.array([1,2,3, np.nan])
et exécutez simplement votre code.En plus de la réponse @unutbu, vous pouvez forcer le tableau d'objets numpy pandas au type natif (float64), quelque chose le long de la ligne
Spécifiez errors = 'contraindre' pour forcer les chaînes qui ne peuvent pas être analysées à une valeur numérique à devenir NaN. Le type de colonne serait
dtype: float64
, puis laisnan
vérification devrait fonctionnerla source
unutbu
;)la source