Ich habe eine Reihe von Floats (einige normale Zahlen, einige Nans), die aus einer Anwendung auf einen Pandas-Datenrahmen hervorgehen.
Aus irgendeinem Grund schlägt numpy.isnan in diesem Array fehl. Wie unten gezeigt, ist jedes Element ein Float. Numpy.isnan wird in jedem Element korrekt ausgeführt. Der Typ der Variablen ist definitiv ein numpy-Array.
Was ist los?!
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
Ein großartiger Ersatz für np.isnan () und pd.isnull () ist
da nur nan nicht gleich sich selbst ist.
quelle
import numpy as np; a = np.array([1,2,3, np.nan])
Sie einfach Ihren Code und führen Sie ihn aus.Zusätzlich zur Antwort von @unutbu können Sie das Pandas-Numpy-Objekt-Array zum nativen Typ (float64) zwingen, etwas in der Richtung
Geben Sie error = 'coerce' an, um zu erzwingen, dass Zeichenfolgen, die nicht auf einen numerischen Wert analysiert werden können, zu NaN werden. Der Spaltentyp wäre
dtype: float64
, und dannisnan
sollte die Prüfung funktionierenquelle
unutbu
;)quelle