Wenn beim Lesen einer CSV- oder Excel-Datei eine leere Zelle vorhanden ist, wird diese als fehlender Wert (NaN) gelesen.
Eine Zusammenfassung zum Suchen, Löschen und Konvertieren einer Matrix, die diesen fehlenden Wert (NaN) enthält.
Enthält Zellen ohne eingegebene Werte oder leere Matrizen.
CSV-Datei lesen
import pandas as pd
df = pd.read_csv('~/desktop/test.csv')
df
Weitere Informationen zum Lesen von CSV-Dateien mit Python finden Sie weiter unten.
-Die leere Zelle wird zu "NaN". -Formelfehler "#REF!", "# DIV / 0!" Und "#NAME?" Werden nicht als fehlende Werte erkannt (so wie sie waren). ・ Die erste Zeile wird als Kopfzeile erkannt
** 1-1. Zuordnung der gesamten Tabelle **
df.isna()
└ "df": Daten mit einer Tabelle
Ordnen Sie die gesamte Tabelle zu
df.isna()
▼ Ausgabe
NaN wird als "True" und andere als "False" angezeigt.
▼ Originaldaten
pd.isna (angegebener Bereich)
└ "pd.isna ()": pd wird zum Objekt
Zugeordnete Spalte zuordnen
pd.isna(df['col1'])
#Ausgabe
0 False
1 False
2 False
3 False
4 True
5 False
Name: col1, dtype: bool
Ordnen Sie die angegebene Linie zu
pd.isna(df['col1'])
#Ausgabe
0 False
1 False
2 False
3 False
4 True
5 False
Name: col1, dtype: bool
Ordnen Sie die angegebene Linie zu
pd.isna(df.loc[[3]])
▽ Ausgabe
Ordnen Sie die angegebene Linie zu
pd.isna(df[1:4])
▽ Ausgabe
Wenn Sie einen Wert in "()" von "pd.isna ()" eingeben, wird beurteilt, ob es sich um NaN handelt oder nicht. ⇒Geben Sie das Zellenelement ein.
Richterzelle (angegeben durch den Matrixnamen)
pd.isna(df.loc[0,'col4'])
#Ausgabe
#True
Richterzelle (angegeben durch den Matrixnamen)
pd.isna(df.iloc[1,3])
#Ausgabe
#True
Es gibt verschiedene Möglichkeiten, den Bereich einer DataFrame-Tabelle anzugeben. Klicken Sie hier für Details
Richtig, falls zutreffend. Falsch, falls nicht zutreffend.
Ob es sich um eine Zeile oder eine Spalte handelt, wird durch das Vorhandensein oder Fehlen der Option "Achse = 1" umgeschaltet.
・ Df.isna (). All ()
: ** Spalte ** Liste
・ Df.isna (). Alle (Achse = 1)
: ** Linie ** Liste
Liste der Spalten
df.isna().all()
#Ausgabe
col1 False
Unnamed: 1 False
col3 False
col4 True
Unnamed: 4 True
col6 False
dtype: bool
Die Spaltennamen "col4" und "Unbenannt: 4" sind leer.
Liste der Zeilen
df.isna().all(axis=1)
0 False
1 False
2 False
3 False
4 True
5 False
dtype: bool
Der Zeilenname "4" ist leer
Richtig, falls zutreffend. Falsch, falls nicht zutreffend.
Ob es sich um eine Zeile oder eine Spalte handelt, wird durch das Vorhandensein oder Fehlen der Option "Achse = 1" umgeschaltet.
・ Df.isna (). Any ()
: ** Spalte ** Liste
・ Df.isna (). Beliebig (Achse = 1)
: ** Linie ** Liste
Liste der Spalten
df.isna().any()
#Ausgabe
col1 True
Unnamed: 1 True
col3 True
col4 True
Unnamed: 4 True
col6 True
dtype: bool
Alle Spalten enthalten NaN.
Liste der Zeilen
df.isna().any(axis=1)
0 True
1 True
2 True
3 True
4 True
5 True
dtype: bool
Alle Zeilen enthalten NaN.
Es kann verwendet werden, wenn Sie den Status schnell anzeigen möchten.
any ()
gibt True zurück, wenn mindestens ein True in der Liste vorhanden ist, andernfalls False.
Überprüfen Sie, ob mindestens eine leere Spalte vorhanden ist
df.isna().all().any()
#Ausgabe
# True
Wenn die Tabelle mindestens eine ** leere Zeile ** enthält, wird False zurückgegeben, wenn kein True vorhanden ist.
Überprüfen Sie, ob mindestens eine Leerzeile vorhanden ist
df.isna().all(axis=1).any()
#Ausgabe
# True
Enthält es mindestens ein NaN?
df.isna().any().any()
#Ausgabe
# True
Ob es sich um eine Zeile oder eine Spalte handelt, wird durch das Vorhandensein oder Fehlen der Option "Achse = 1" umgeschaltet.
・ Df.isna (). Sum ()
: Anzahl pro ** Spalte ** zählen
・ Df.isna (). Summe (Achse = 1)
: Anzahl pro ** Zeile zählen **
Zählen Sie das in jeder Spalte enthaltene NaN
df.isna().sum()
#Ausgabe
col1 1
Unnamed: 1 2
col3 1
col4 6
Unnamed: 4 6
col6 2
dtype: int64
Zählen Sie das in jeder Zeile enthaltene NaN
df.isna().sum(axis=1)
#Ausgabe
0 2
1 3
2 3
3 2
4 6
5 2
dtype: int64
Durch "sum ()" wird außerdem die Anzahl der NaN in jeder Zeile addiert.
Anzahl der NaNs in der gesamten Tabelle
df.isna().sum().sum()
#Ausgabe
# 18
len (df ['Zeilenname'])
--count (df ['Zeilenname'])
Suchen Sie die Anzahl der NaNs in der angegebenen Zeile oder Spalte.
② count (df ['Zeilenname'])
└ Anzahl der anderen Elemente als NaN in der angegebenen Zeile
Durch Einstellen von (1) - (2) wird die Anzahl der in der angegebenen Zeile enthaltenen NaN berechnet.
Ergänzung
Zählmethode: Zählen Sie die Anzahl anderer Elemente als NaN
** ▼ Zielspalte (Spalte mit zwei NaN. Spaltenname: Spalte 6) **
Zielspalte
df.col6
0 A
1 NaN
2 C
3 D
4 NaN
5 F
Anzahl der NaNs in der angegebenen Zeile
len(df['col6'])-df['col6'].count()
#Ausgabe
# 2
Möglichkeit | Inhalt |
---|---|
axis=0 | Leitung (optional) |
axis=1 | Säule |
how='any' | Löschen, wenn es nur eine NaN gibt(Optional) |
how='all' | Löschen, wenn alle NaN |
thresh=n | Nicht NaN(Eine effektive)Nicht löschen, wenn n oder mehr Zellen vorhanden sind |
subset=['A',,] | Löschen Sie Zeilen, die NaN im angegebenen Spaltennamen enthalten (entfernen Sie NaN aus dem angegebenen Spaltennamen). |
subset=['a',,], axis=1 | Löschen Sie Spalten, die NaN im angegebenen Zeilennamen enthalten (entfernen Sie NaN aus dem angegebenen Zeilennamen). |
inplace=True | Überschreiben zulassen |
① Achse = 0 (weggelassen) ②axis=1 ③dropna(how='all').dropna(how='all', axis=1)
dropna(how='all')
dropna(how='all', axis=0)
Entfernen Sie alle Leerzeilen
df.dropna(how='all')
▽ Ausgabe
Zeile 4 gelöscht.
②axis=1
dropna(how='all', axis=1)
Löschen Sie "Spalten", die Leerzeichen enthalten.
Entfernen Sie alle leeren Spalten
df.dropna(how='all')
▽ Ausgabe
Zwei Spalten, col4 und Unbenannt, wurden entfernt: 4.
Zeilen und Spalten entfernt, in denen alle Elemente leer sind.
Nach dem Entfernen von Leerzeilen mit dropna (how = 'all')
Entfernen Sie leere Spalten mit dropna (how = 'all', axis = 1)
.
Entfernen Sie leere Zeilen und Spalten
df.dropna(how='all').dropna(how='all', axis=1)
▽ Ausgabe
Zeile 4, Spalte col4, Unbenannt: 4 gelöscht.
① Standard ②axis=1
Es gibt vier NaNs. (Zeile, Spalte) = (4,1), (5,2), (1,5), (4,5)
Die Standardeinstellung der dropna-Methode ist, dass als Option how = 'any'
angegeben wird.
dropna()
dropna(how='any')
dropna(how='any', axis=0)
In jedem Fall wurden die Zeilen 1, 4, 5 und 6 einschließlich NaN gelöscht.
Da "how =" any "" weggelassen werden kann, sind die folgenden beiden Prozesse gleich.
dropna(axis=1)
dropna(how='any', axis=1)
Alle enthalten ein oder mehrere NaN, Spalte 1, Unbenannt: 1, Spalte 5 gelöscht.
①df.dropna(thresh=n) ②df.dropna(thresh=n, axis=1)
▽ Ergänzung dresch ist eine Abkürzung für "Schwelle".
・ Tabelle mit 10 Zeilen x 6 Spalten -Die Anzahl von NaN ist 1 in der 0. Zeile (9 Zellen sind nicht). Die Anzahl der NaN erhöht sich jeweils um eine Spalte. ・ Alle 4. Spalten sind leer
Gelöschte Zeilen mit einer oder weniger anderen Zellen als NaN. Entspricht dem Löschen aller NaN-Leitungen.
** ▼ Wenn dresch = 1 **
Angabe eines Schwellenwerts (n)=1)
df.dropna(thresh=1)
Es gibt keine Nur-NaN-Zellen, daher bleiben alle Zeilen erhalten.
Angabe eines Schwellenwerts (n)=4)
df.dropna(thresh=4)
Zeilen mit 4 oder weniger anderen Zellen als NaN, Zeilen 1, 2 und 3 werden gelöscht.
Angabe eines Schwellenwerts (n)=7)
df.dropna(thresh=7)
Da es keine Zeilen mit 7 oder mehr Zellen außer NaN gibt, löschen Sie alle.
Gelöschte Spalten mit einer oder weniger anderen Zellen als NaN. Entspricht dem Löschen aller NaN-Spalten.
Angabe eines Schwellenwerts (n)=1)
df.dropna(thresh=1, axis=1)
Alle NaN-Säulen 4 wurden entfernt.
Angabe eines Schwellenwerts (n)=7)
df.dropna(thresh=7, axis=1)
Spalten mit 7 oder weniger anderen Zellen als NaN, Zeilen 4, 5 und 6 werden gelöscht.
Angabe eines Schwellenwerts (n)=11)
df.dropna(thresh=11, axis=1)
Da es keine Spalte mit 11 oder mehr Zellen außer NaN gibt, löschen Sie alle.
①df.dropna(subset=['AAA', 'BBB']) ②df.dropna(subset=['aaa', 'bbb'], axis=1)
・ 10 Zeilen x 6 Spalten ・ Der Zeilenname ist Zeile x Zeilennummer ・ Der Spaltenname ist die Spaltennummer col x
①df.dropna(subset=['AAA', 'BBB']) Löschen Sie die Zeile, indem Sie den Spaltennamen angeben.
df.dropna(subset=['AAA', 'BBB'])
└ "df": Variable mit Tabelle
└ "Teilmenge": Option zur Angabe des Namens der Tabelle oder Spalte
└ "AAA" "BBB": Spaltenname (optional)
Löschen Sie die Zeile, indem Sie den Spaltennamen angeben
df.dropna(subset=['col1','col3','col5'])
Zeilen 1,2,3,4,5 gelöscht. Die angegebenen Spalten col1,3,5 enthalten kein NaN mehr.
Löschen Sie die Spalte mit NaN in den Zeilen 0 und 3. (NaN verschwindet aus der angegebenen Spalte)
Löschen Sie die Zeile, indem Sie den Spaltennamen angeben
df.dropna(subset=['row0','row3'], axis=1)
Die Spalten col3, col4, col5 wurden entfernt.
Standardmäßig nicht überschreiben.
└inplace=False
Beschreiben Sie Folgendes, um das Überschreiben zu ermöglichen.
└**inplace=True
**
Berechtigung überschreiben
df.dropna(thresh=5, inplace=True)
df
Kein Überschreiben
df.dropna(thresh=5)
df
Die Tabelle bleibt gleich.
Die Austauschmethode und die Bedingungen für zu ersetzendes NaN sind als Optionen angegeben.
Möglichkeit | Inhalt |
---|---|
axis=0 | Zeile (weggelassen) |
axis=1 | Säule |
value | Wert zur Umwandlung von NaN |
method='bfill' | In den Wert in der unteren Zelle von NaN umrechnen |
method='backfill' | 'bfill'Gleich wie |
method='ffill' | Konvertieren Sie NaN in den Wert in der oberen Zelle |
method='pad' | 'ffill'Gleich wie |
method='bfill', axis=1 | In den Wert in der rechten Zelle von NaN konvertieren |
method='ffill', axis=1 | In den Wert in der linken Zelle von NaN konvertieren |
limit=n | Ersetzen Sie bis zum n-ten NaN. Nicht mehr ersetzen. |
inplace=True | Überschreiben zulassen |
** ② Geben Sie die Anzahl der zu ersetzenden NaN an ** 1-1. fillna('AAA', limit=n) 1-2. fillna('AAA', limit=n, axis=1) 1-3. fillna(method='ffill', limit=n) 1-4. fillna(method='ffill', limit=n, axis=1)
** ③ Überschreiben zulassen **
fillna('AAA')
df.fillna('AAA')
** ▼ Beispiel: Wenn Sie angeben, durch den Wert in der rechten Zelle zu ersetzen **
Vor dem Austausch: NaN NaN NaN AAA Nach dem Austausch: AAA AAA AAA AAA
** ▼ Liste der Methodenoptionen **
method | Bedeutung | Inhalt |
---|---|---|
ffill | forward fill | Ersetzen Sie durch den Wert in der vorderen Zelle (Zeile: oben, Spalte: links) |
pad | padding | Gleich wie ffill |
bfill | backward fill | Ersetzen Sie durch den Wert in der hinteren Zelle (Zeile: unten, Spalte: rechts) |
backfill | backward fill | Gleich wie bfill |
Bestimmen Sie bei der Angabe einer Zeile anhand der Zeilennummer, ob sie vor oder nach der Zeile liegt. (Auf oder ab)
Bestimmen Sie beim Angeben einer Spalte anhand der Spaltennummer, ob sie vorne oder hinten ist. (Links oder rechts)
Error
ValueError: Cannot specify both 'value' and 'method'.
Ersetzen Sie durch den Wert in der oberen Zeile.
ffill
df.fillna(method='ffill')
In einen Wert über NaN umrechnen. Wird nicht ersetzt, wenn die oberste Reihe NaN ist.
Ersetzen Sie durch den Wert in der vorderen Spalte.
ffill,axis=1
df.fillna(method='ffill', axis=1)
Ersetzen Sie durch den Wert in der letzten Zeile.
bfill
df.fillna(method='bfill')
Ersetzen Sie durch den Wert in der hinteren Spalte.
bfill,axis=1
df.fillna(method='bfill', axis=1)
Mit der Option limit können Sie die Anzahl der zu ersetzenden NaN angeben.
limit=n
Ersetzen Sie bis zum n-ten. Nicht mehr ersetzen.
** Beispiel: Wenn limit = 2 ist, ist der zu ersetzende Wert AAA und die Achse eine Spalte **
■ Vor dem Austausch AAA NaN NaN AAA AAA AAA NaN NaN NaN AAA AAA NaN AAA NaN AAA NaN NaN AAA NaN NaN
■ Nach dem Austausch AAA AAA AAA AAA AAA AAA AAA AAA NaN AAA AAA AAA AAA AAA AAA AAA AAA AAA NaN NaN
-Ersetzen Sie jede Zeile von links bis zum zweiten NaN.
Von oben in der Reihenfolge der Zeilennummern ersetzt NaN bis zur Sekunde.
limit=2
df.fillna('AAA', limit=2)
Ersetzen Sie für jede Spalte von oben nach zweit. Nicht mehr ersetzen.
Ersetzen Sie von oben nach dem dritten NaN in der Reihenfolge der Zeilennummern.
limit=3,axis=1
df.fillna('AAA', limit=3, axis=1)
Ersetzt bis zum dritten NaN in der Reihenfolge der Zeilennummern durch den vorherigen Wert.
ffill,limit=3
df.fillna(method='ffill', limit=3)
Ersetzen Sie bis zum dritten NaN in der Reihenfolge der Spaltennummern durch den vorherigen Wert.
ffill,limit=3,axis=1
df.fillna(method='ffill', limit=3)
Standardmäßig nicht überschreiben.
└inplace=False
Beschreiben Sie Folgendes, um das Überschreiben zu ermöglichen.
└**inplace=True
**
Berechtigung überschreiben
df.fillna('AAA', inplace=True)
df
Kein Überschreiben
df.fillna('AAA')
df
Die Tabelle bleibt gleich.
Recommended Posts