Was ist der Unterschied zwischen NaN und Keine?
Lese ich zwei Spalten einer csv-Datei mit pandas readcsv()
und dann die Zuordnung der Werte zu einem Wörterbuch. Die Spalten enthalten Zeichenfolgen aus zahlen und Buchstaben. Gelegentlich gibt es Fälle, in denen eine Zelle leer ist. Meiner Meinung nach, wird der Wert gelesen, der Wörterbuch-Eintrag sollte None
sondern nan
zugeordnet ist. Sicherlich None
ist mehr beschreibend für eine leere Zelle als null-Wert, in der Erwägung, dass nan
sagt nur, dass der ausgelesene Wert ist keine Zahl.
Ist mein Verständnis richtig ist, was IST der Unterschied zwischen None
und nan
? Warum ist nan
zugewiesen statt None
?
Auch mein Wörterbuch überprüfen Sie alle leeren Zellen mit numpy.isnan()
:
for k, v in my_dict.iteritems():
if np.isnan(v):
Aber das gibt mir eine Fehlermeldung, dass ich nicht verwenden können, diese Prüfung für v
. Ich denke, es ist, weil ein integer-oder float-variable und nicht ein string verwendet werden soll. Wenn dies wahr ist, wie kann ich überprüfen v
für eine "leere Zelle"/nan
Fall?
qwerty
ist keine Zahl.Ich weiß, so sicher
None
wäre eine bessere Beschreibung der Wert eine leere Zelle.meine Antwort beschreibt, dass
InformationsquelleAutor user1083734 | 2013-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
NaN wird als Platzhalter verwendet für fehlende Daten konsequent in pandas, die Konsistenz ist gut. Ich in der Regel Lesen/übersetzen NaN als "fehlt". Siehe auch die "die Arbeit mit fehlenden Daten' Abschnitt in der Dokumentation.
Wes schreibt in der Dokumentation die Entscheidung der NA-Vertretung":
Hinweis: die "gotcha", die Ganzzahl-Serie mit fehlenden Daten sind Verallgemeinerung zu schwimmt.
Meiner Meinung nach der Hauptgrund für die Verwendung NaN (über Keine), ist, dass es gespeichert werden kann, mit numpy ist dtype float64, eher als die weniger effizienten Objekt-dtype, sehen NA Typ promotions.
Jeff Kommentare (unten):
Sagen, dass viele Operationen können heute noch genauso gut funktionieren mit Keiner vs-NaN (aber vielleicht nicht unterstützt, d.h. Sie können manchmal geben überraschende Ergebnisse):
Die zweite Frage zu beantworten:
Sie sollten mit
pd.isnull
undpd.notnull
testen für fehlende Daten (NaN).np.nan
ermöglicht vektorisierte Operationen; seine ein float-Wert, währendNone
per definition Kräfteobject
Art, und im Grunde deaktiviert alle Effizienz in numpy, so wiederholen Sie 3 mal schnell:object==bad, float==good
siehe auch: stackoverflow.com/a/19866269/1240268
InformationsquelleAutor Andy Hayden
NaN
können verwendet werden als numerischer Wert auf mathematische Operationen, währendNone
nicht (oder zumindest nicht sollte).NaN
ist ein numerischer Wert, wie definiert in IEEE 754 floating-point standard.None
ist ein internes Python-tipe (NoneType
) und würde gerne noch mehr sein "nicht vorhanden" oder "leer" als "numerisch " ungültig" in diesem Zusammenhang.Haupt - "symptom" ist, dass, wenn Sie, sagen wir, eine Durchschnittliche oder eine Summe auf ein array mit NaN, selbst einen einzigen, Sie bekommen NaN als Ergebnis...
In der anderen hand, Sie können nicht führen Sie mathematische Operationen mit
None
als Operanden.So, je nach Fall könnten Sie
None
als ein Weg, zu sagen, Ihr Algorithmus nicht zu prüfen, ungültige oder nicht vorhandene Werte auf Berechnungen. Das würde bedeuten, dass der Algorithmus sollte jeder test Wert, um zu sehen, wenn esNone
.Numpy hat einige Funktionen zu vermeiden, NaN-Werte zu kontaminieren Ihre Ergebnisse, wie
nansum
undnan_to_num
zum Beispiel.df=pd.readcsv('file.csv')
mirNaN
Werte für die leeren Zellen und nichtNone
? So weit ich bin mir bewusst, pd.DataFrames sind nicht exklusiv für zahlen.Gut, es ist wahrscheinlich eine design-Wahl. Ich nehme an, DataFrames und Serien haben eine
dtype
, so dass ungültige Wertedtype=float
muss dargestellt werden durch numerische Werte, dieNaN
ist undNone
ist nicht (None
istNoneType
).Auch eine Menge Pandas Methoden haben eine
na
argument, die Sie entscheiden lassen, welchen Wert Sie verwenden, um zu ersetzen nicht Verfügbarer WerteOk, vielen Dank. Also ich bin nicht wirklich Lesen zahlen in mein DataFrame, aber strings aus zahlen und Buchstaben. Welche Art der Prüfung sollte ich verwenden zum erkennen von leeren Zellen? Eine überprüfung wie; wenn dtype==float: ??
Vielleicht buchen Sie eine Probe von Ihren CSV-Daten helfen würde. Ich kann mir vorstellen, dass, wenn es strings sind, dann dtype wäre, string für die ganze Spalte (Reihe). Aber vielleicht, wenn nicht jede Zeile muss die gleiche Anzahl von Spalten, die Sie am Ende mit nicht verfügbaren Daten. Ich denke, Sie haben zu prüfen.
InformationsquelleAutor heltonbiker
Die Funktion
isnan()
überprüft, um zu sehen, wenn etwas ist "not A Number" und gibt an, ob oder nicht eine variable ist eine Zahl, zum Beispielisnan(2)
würde false zurückgeben,Die bedingte
myVar is not None
gibt an, ob die variable definiert istIhre numpy-array verwendet
isnan()
denn es soll ein array von zahlen ist und es initialisiert alle Elemente des Arrays zuNaN
diese Elemente werden als "leer"isnan(2)
zurückkehren würdeFalse
, da 2 nicht ein NaN.Auch
numpy.empty
nicht initialisieren von array-Werten zuNaN
. Es geht einfach nicht initialisieren die Werte überhaupt.idk, was ich dachte
Die richtige Prüfung für
None
-ness istmyVar is not None
, nichtmyVar != None
.Beachten Sie, dass
np.isnan()
ist nicht implementiert, für string-Variablen, so dass, wenn Sie übergeben einen string, es wird Abstürzen. Besserpd.isnull
die funktioniert auch mit strings.InformationsquelleAutor Stephan
NaN
stants für NICHT eine Reihe.None
stehen könnten für alle.InformationsquelleAutor diegoaguilar