Meine Numpy-Arrays kennzeichnen np.nan
fehlende Werte. Während ich den Datensatz durchlaufe, muss ich solche fehlenden Werte erkennen und auf besondere Weise behandeln.
Naiv habe ich verwendet numpy.isnan(val)
, was gut funktioniert, es val
sei denn, es gehört nicht zu der Untergruppe der von unterstützten Typen numpy.isnan()
. Zum Beispiel können fehlende Daten in Zeichenfolgenfeldern auftreten. In diesem Fall erhalte ich:
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
Gibt False
es eine Möglichkeit, dies elegant und effizient zu handhaben, außer einen teuren Wrapper zu schreiben, der die Ausnahme abfängt und zurückgibt ?
pandas
hatpandas.isnull()
: Ich bin nicht sicher, ob das Ihren Anforderungen entspricht, daher könnten einige Beispieldaten gut sein.pandas.isnull()
scheint perfekt zu funktionieren. Der einzige Datentyp, mit dem ich mich derzeit befasse,numpy.isnan()
ist ein String, der gut damitpandas.isnull()
umgeht. Tatsächlich scheint es mit jedem beliebigen Objekt, das ich darauf geworfen habe, gut umzugehen. Gab es spezielle Probleme, über die Sie besorgt waren? Andernfalls möchten Sie Ihren Kommentar möglicherweise als vollständige Antwort einreichen, da dies zumindest für Pandas-Benutzer wie eine kanonische Antwort erscheint.Antworten:
pandas.isnull()
(auchpd.isna()
in neueren Versionen) prüft auf fehlende Werte sowohl in numerischen als auch in String / Objekt-Arrays. In der Dokumentation wird nach Folgendem gesucht:Kurzes Beispiel:
Die Idee
numpy.nan
, fehlende Werte darzustellen, wurdepandas
eingeführt, weshalbpandas
die Werkzeuge vorhanden sind, um damit umzugehen.Datumszeiten auch (wenn Sie verwenden, müssen
pd.NaT
Sie den dtype nicht angeben)quelle
Ist Ihr Typ wirklich willkürlich? Wenn Sie wissen, dass es sich nur um einen int float oder einen String handelt, können Sie dies einfach tun
Angenommen, es ist in Numpy gehüllt, hat es immer einen d-Typ und nur float und complex können NaN sein
quelle
dtype
. Möglicherweise müssen Sie tuntype(val) == 'float'
type(val) == float and np.isnan(val)
- arbeitete für mich