English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Pandas Datenverlust Operation Beispiel
Im realen Leben ist Datenverlust immer ein Problem. Maschinelles Lernen und Datenmining等领域在模型vorhersagen accuracy方面面临严重问题,因为缺少值会导致数据质量较差。在这些领域中,缺失值处理是使模型更准确和有效的主要重点。
Lassen Sie uns eine Online-Umfrage für ein Produkt in Betracht ziehen. Oft teilen die Menschen nicht alle Informationen, die sie haben. Selten teilen sie ihre Erfahrungen, aber nicht, wie lange sie das Produkt verwendet haben; selten teilen sie die Zeit, die sie das Produkt verwendet haben, anstatt ihre Kontaktinformationen. Daher geht immer ein Teil der Daten verloren, was in Echtzeit sehr häufig vorkommt.
Lassen Sie uns nun sehen, wie wir fehlende Werte mit Pandas verarbeiten können (z.B. NA oder NaN).
# import the pandas library import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df)
Die Ergebnisse des Laufs lauten wie folgt:
one two three a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN ersetzt mit '0': one two three a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Durch Neuerstellung der Indizes erstellen wir einen DataFrame mit fehlenden Werten. In der Ausgabe wird NaN für 'not a number' verwendet.
Um die Erkennung fehlender Werte zu erleichtern (und verschiedene Array-Datentypen), bietet Pandas die Funktionen ISNULL() und NOTNULL() an, die auch auf Objekten von Serien und DataFrames angewendet werden können.-
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df['one'].isnull())
Die Ergebnisse des Laufs lauten wie folgt:
a Falsch b Wahr c Falsch d Wahr e Falsch f Falsch g Wahr h Falsch Name: one, dtype: bool
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df['one'].notnull())
Die Ergebnisse des Laufs lauten wie folgt:
a Wahr b Falsch c Wahr d Falsch e Wahr f Wahr g False h True Name: one, dtype: bool
Berechnung von Zusammenfassungsdaten, bei der NA als Null betrachtet wird Wenn alle Daten unangemessen sind, ist das Ergebnis unangemessen
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df['one'].sum())
Die Ergebnisse des Laufs lauten wie folgt:
2.02357685917
import pandas as pd import numpy as np df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two']) print(df['one'].sum())
Die Ergebnisse des Laufs lauten wie folgt:
nan
Pandas bietet verschiedene Methoden zum Entfernen von fehlenden Werten. Die fillna-Funktion kann NA-Werte mit nicht leeren Daten auf verschiedene Weisen "auffüllen".
Das folgende Programm zeigt, wie "NaN" durch "0" ersetzt wird.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one', ,'two', 'three']) df = df.reindex(['a', 'b', 'c']) print(df) print("NaN ersetzt mit '0':") print(df.fillna(0))
Die Ergebnisse des Laufs lauten wie folgt:
one two three a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN ersetzt mit '0': one two three a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Hier füllen wir Nullwerte; im Gegensatz dazu können wir auch andere Werte füllen.
Verwenden Sie das Konzept der Füllung, das im Kapitel "Neuindizierung" diskutiert wird, um fehlende Werte zu füllen.
Methode | Operation |
pad/fill | Vorwärts füllen< |
bfill/backfill | Nach vorne füllen |
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df.fillna(method='pad'))
Die Ergebnisse des Laufs lauten wie folgt:
one two three a 0.077988 0.476149 0.965836 b 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 d -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df.fillna(method='backfill'))
Die Ergebnisse des Laufs lauten wie folgt:
one two three a 0.077988 0.476149 0.965836 b -0.390208 -0.551605 -2.301950 c -0.390208 -0.551605 -2.301950 d -2.000303 -0.788201 1.510072 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g 0.085100 0.532791 0.887415 h 0.085100 0.532791 0.887415
Wenn Sie nur verlorene Werte ausschließen möchten, verwenden Sie die dropna-Funktion zusammen mit dem axis-Parameter. Standardmäßig ist axis = 0, das bedeutet, dass eine ganze Zeile ausgeschlossen wird, wenn irgendein Wert in einer Zeile NA ist.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df.dropna())
Die Ergebnisse des Laufs lauten wie folgt:
one two three a 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', ,'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print(df.dropna(axis=1))
Die Ergebnisse des Laufs lauten wie folgt:
Leerer DataFrame Spalten: [ ] Index: [a, b, c, d, e, f, g, h]
Oft müssen wir einen spezifischen Wert durch einen allgemeinen Wert ersetzen. Dies können wir durch die Anwendung der Methode replace erreichen.
Die Verwendung von Skalärwerten zum Ersatz von NA ist das äquivalente Verhalten der Funktion fillna().
import pandas as pd import numpy as np df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}) print(df.replace({1000:10,2000:60}))
Die Ergebnisse des Laufs lauten wie folgt:
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60
import pandas as pd import numpy as np df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}) print(df.replace({1000:10,2000:60)
Die Ergebnisse des Laufs lauten wie folgt:
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60