[PYTHON] Gibt es NaN im Pandas DataFrame?

Ich suchte ein bisschen und konnte es nicht finden, also gelang es mir herauszufinden, wie ich es löschen sollte, also mach dir eine Notiz.

Das Thema lautet "Gibt es NaN im Pandas DataFrame?" Um zu überprüfen, ob die Daten ordnungsgemäß verarbeitet werden, möchte ich ** herausfinden, ob und wo sich ein NaN-Wert im Datenrahmen befindet **. Wenn Sie NaN füllen / löschen möchten, können Sie fillna () / dropna () verwenden. Jetzt möchten Sie jedoch ** "überprüfen, ob NaN vorhanden ist, und die Zeile (Spalte) anzeigen. ** **.

Als Beispiel möchte ich nur die 2.-4. Zeile oder 1-3. Spalte dieses Datenrahmens extrahieren.

Datenerstellung


df=pd.DataFrame(np.random.randn(5,5))
df.ix[2:, 1:3] = np.nan
df.columns=list('abcde')
df
#[Out]#           a         b         c         d         e
#[Out]# 0 -0.678873 -1.277486 -1.062232  0.097525 -2.386115
#[Out]# 1 -1.063709 -1.919997 -0.131733 -0.606348  0.101888
#[Out]# 2 -1.701473       NaN       NaN       NaN  0.201468
#[Out]# 3 -0.624932       NaN       NaN       NaN -0.654297
#[Out]# 4  0.345065       NaN       NaN       NaN -0.232199

NaN als Bool-Wert ausgeben

Verwenden Sie isnull () / notnull (), um festzustellen, ob NaN vorhanden ist. Referenz unten

Umgang mit NaN durch Pandas Official: Dokumentation zu Pandas 0.19.1 »Arbeiten mit fehlenden Daten

Verwenden Sie die isnull-Methode

isnull()


df.isnull()
#[Out]#        a      b      c      d      e
#[Out]# 0  False  False  False  False  False
#[Out]# 1  False  False  False  False  False
#[Out]# 2  False   True   True   True  False
#[Out]# 3  False   True   True   True  False
#[Out]# 4  False   True   True   True  False

Was zurückgegeben wird, ist ein Datenrahmen, der dieselbe Größe wie df hat und einen Bool-Wert enthält. Nur bei NaN wahr.

notnull () ist die Umkehrung von True / False des von isnull () zurückgegebenen Datenrahmens.

Das ist ein bisschen anders als das, was ich machen möchte

Fassen Sie zusammen, ob sich in der Zeile (Spalte) NaN befindet.

Was ich tun möchte ** "Überprüfen Sie, ob NaN vorhanden ist, und zeigen Sie die Zeile (Spalte) an" ** Wenn zerlegt

Ich frage mich, ob es so sein wird.

** Es gibt mehr als einen Honyalara ** Apropos ** Numpys "beliebige" Methode **

np.any()


df.isnull().any()
#[Out]# a    False
#[Out]# b     True
#[Out]# c     True
#[Out]# d     True
#[Out]# e    False
#[Out]# dtype: bool

df.isnull().any(axis=1)
#[Out]# 0    False
#[Out]# 1    False
#[Out]# 2     True
#[Out]# 3     True
#[Out]# 4     True
#[Out]# dtype: bool

df.isnull().any(axis=0)  # df.isnull().any()Gleich wie
#[Out]# a    False
#[Out]# b     True
#[Out]# c     True
#[Out]# d     True
#[Out]# e    False
#[Out]# dtype: bool

Da die Standardabtastrichtung von "any ()" die Zeilenrichtung (Achse = 0) ist, ist "df.isnull (). Any ()" eine Konvertierung durch "True" (isnull (), dh "NaN") in der Spalte. Gibt "True" zurück, wenn mehr als eine enthalten ist, / "False", wenn nicht. Wenn Sie eine (Achse = 1) festlegen, wird die Scanrichtung geändert und die Spaltenrichtung (Achse = 1) wird danach durchsucht, ob "True" (dh "NaN") enthalten ist.

axis = kann weggelassen werden, daher ist das Schreiben von df.isnull (). Any (1) dasselbe wie df.isnull (). Any (axis = 1).

Befindet sich überhaupt ein NaN in der Warteschlange?

Es ist ein wenig anders als das, was ich tun möchte, und damit es ** True zurückgibt, wenn sich an einer Stelle NaN befindet **, überlappen Sie alle.

Enthält es auch nur ein NaN?


df.isnull().any().any()  #Enthält NaN
#[Out]# True
dff=pd.DataFrame(np.random.randn(5,5))  #Enthält kein NaN
dff.isnull().any().any()
#[Out]# False

Ich habe das gleiche für den Stapelüberlauf getan. stack overflow - Python pandas: check if any value is NaN in DataFrame Neben df.any (). Any ()

Ich benutze es. Die schnellste Zeit, gemessen mit "% timeit", war "df.isnull (). Values.any ()". ** Wenn Sie wissen möchten, ob auch nur ein NaN enthalten ist **, verwenden Sie es.

Extrahieren Sie Zeilen (Spalten), die NaN enthalten

Ich kann endlich machen was ich will. Mit df.isnull (). Any (1) können Sie einen Bool-Wert erstellen, um festzustellen, ob die Zeile NaN enthält, sie in Scheiben schneiden ** und nur die Spalten extrahieren, die NaN enthalten.

Linienextraktion einschließlich NaN


df[df.isnull().any(1)]
#[Out]#           a   b   c   d         e
#[Out]# 2 -1.701473 NaN NaN NaN  0.201468
#[Out]# 3 -0.624932 NaN NaN NaN -0.654297
#[Out]# 4  0.345065 NaN NaN NaN -0.232199

Zeilenextraktion einschließlich NaN


df.ix[:,df.isnull().any()]
#[Out]#           b         c         d
#[Out]# 0 -1.277486 -1.062232  0.097525
#[Out]# 1 -1.919997 -0.131733 -0.606348
#[Out]# 2       NaN       NaN       NaN
#[Out]# 3       NaN       NaN       NaN
#[Out]# 4       NaN       NaN       NaN

das ist alles!

Es scheint einen einfacheren Weg zu geben, aber nicht wahr? Lass es mich wissen, bitte. Während die Extraktion nur der Pandas-Zeilen "loc", "iloc" hat, hat die Extraktion von Spalten "df. " oder "df.ix [:, ]". Es gibt, aber es ist nicht schön, also gibt es einen schönen Weg (Zeilenlok, iloc und gepaarte Spaltenlok, iloc) (\ * ω \ *)

Update 15.04.2017 Extrahieren Sie die dritte Zeile mit "df.icol (3)" Extrahieren Sie die 0. und 2. Spalte mit df.icol ([0,2]) In df.icol ([0: 2]) werden die 0., 1. und 2. Spalte ** nicht extrahiert und fehlerhaft **


Ich habe einen Geschwindigkeitsvergleich im Kommentarbereich gepostet.

Recommended Posts

Gibt es NaN im Pandas DataFrame?
[Pandas] Wenn sich die Daten der ersten Zeile im Header von DataFrame befinden
Überprüfen Sie, ob die erwartete Spalte in Pandas DataFrame vorhanden ist
Kombinieren Sie Listen zu einem DataFrame mit Pandas
Gibt es ein besonderes in scipy? ??
In Python gibt es keinen Schalter
Leider gibt es kein Gefühl der Einheit in der where-Methode
Durchsuchen Sie .loc und .iloc gleichzeitig in pandas DataFrame
[Python] Was ist Pandas Series und DataFrame?
Holen Sie sich die besten n-ten Werte in Pandas
Was ist "Mahjong" in der Python-Bibliothek? ??
So weisen Sie den Index im Pandas-Datenrahmen neu zu
[Pandas] Erweitern Sie die Zeichenfolgen zu DataFrame
Das Datum wird in matplotlib falsch angezeigt.
[pandas] Wenn Sie die Standardindexbezeichnung in der at-Methode angeben, ist "" nicht erforderlich
Pipfile wird nicht im aktuellen Verzeichnis erstellt
Was ist im Docker Python-Image pfeifend?
Löschen Sie Zeilen mit beliebigen Werten in pandas DataFrame
Über den Unterschied zwischen "==" und "is" in Python
Feststellen, ob das Bild Vögel enthält
[Python] Sortieren Sie die Tabelle nach sort_values (pandas DataFrame)
Entfernen Sie Zeilen mit doppelten Indizes in pandas DataFrame
Speichern Sie Pandas DataFrame als .csv.gz in Amazon S3
Gibt es keinen Standardwert im Wörterbuch?
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Dies ist ein Beispiel für eine Funktionsanwendung im Datenrahmen.
Wenn das ausgewählte Objekt in bpy.context.selected_objects nicht zurückgegeben wird
Linux ist in erster Linie so etwas
Wenn es keine DI-Container auf der Welt gäbe.
VS Code sagt, dass in cv2 ein Fehler vorliegt
Konvertieren Sie durch Kommas getrennte numerische Zeichenfolgen in Zahlen in Pandas DataFrame
Was ist das Domain-Attribut, das in Plotlys Layout geschrieben ist?
Überprüfen Sie, ob es sich um Unix in der Skriptsprache handelt
Füllen Sie Ausreißer mit NaN basierend auf Quadranten in Pandas
Suchen Sie den Teil 575 aus Wikipedia in Python
Bestimmen Sie, ob im Objekt ein Attribut definiert ist
Lerne Pandas in 10 Minuten
Verwenden Sie DataFrame in Java
Verwenden Sie Mean mit DataFrame
Beim Lesen eines Bildes mit SimpleITK tritt ein Problem auf, wenn sich Japanisch im Pfad befindet
UnicodeDecodeError in pandas read_csv
Python-Anwendung: Pandas # 3: Dataframe
Test.py wird auf dem Webserver in Python3 nicht angezeigt.
[Python] Öffnen Sie die CSV-Datei in dem von Pandas angegebenen Ordner
Überprüfen Sie mit apply () (dataframe, Pandas), welche Zeile den Fehler verursacht hat.
Berechnen Sie den Zeitunterschied zwischen zwei Spalten mit Pandas DataFrame
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
Praktische Funktion zum Hinzufügen von Spalten an einer beliebigen Stelle in Pandas DataFrame
Holen Sie sich automatisch den Port, an dem Arduino in Python steckt
Finden Sie heraus, wie viele Zeichen sich in der Zeichenfolge befinden.
Rufen Sie den Klassennamen ab, in dem die Methode im Dekorator definiert ist
In der Flatpak-Anwendung kann kein Japanisch eingegeben werden. Die Ursache ist Fcitx.
Die minimale Methode, die beim Aggregieren von Daten mit Pandas zu beachten ist
Gibt es ein Geheimnis in der Häufigkeit der Umfangszahlen?
Beim Zusammenführen per Pull-Anforderung enthält die Antwort der Github-API keine Committer-Informationen