Pandas df.fillna()-Funktion
df.fillna()ist eine Funktion in Pandas, die zum Füllen fehlender Werte verwendet wird.
unddropna()Im Gegensatz zum Löschen fehlender Werte,fillna()ermöglicht es uns, fehlende Daten mit angegebenen Werten, Mittelwert, Median, Vorwärtsfüllung oder Rückwärtsfüllung usw. zu füllen. Dies ist sehr nützlich, um Datenintegrität und Analysegenauigkeit zu wahren.
Grundlegende Syntax und Parameter
fillna()ist eine Memberfunktion von DataFrame, die über den Punktoperator aufgerufen wird.zum Aufrufen.
Syntaxformat
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
Parameterbeschreibung
| Parameter | Type | Erforderlich | Beschreibung | Standardwert |
|---|---|---|---|---|
| value | Skalar, dict, Series, DataFrame | Optional | Der Wert, der zum Füllen fehlender Werte verwendet wird. Er kann eine Konstante, ein Wörterbuch (das unterschiedliche Werte für unterschiedliche Spalten angibt), eine Series oder ein DataFrame sein. | Keine |
| method | str | Optional | Füllmethode.'ffill'oder'pad'Gibt an, dass mit dem vorherigen Wert gefüllt wird (Vorwärtsfüllung);'bfill'oder'backfill'Gibt an, dass mit dem nächsten Wert gefüllt wird (Rückwärtsfüllung). |
Keine |
| axis | int oder str | Optional | Gibt die Füllrichtung an.0oder'index'Gibt an, dass entlang von Zeilen gefüllt wird;1oder'columns'Gibt an, dass entlang von Spalten gefüllt wird. Nur wennmethodist nichtNoneist es gültig. |
0 |
| inplace | bool | Optional | WennTrue, verändert es das ursprüngliche DataFrame direkt und gibt kein neues Objekt zurück; wennFalse, gibt es ein neues DataFrame zurück, und die ursprünglichen Daten bleiben unverändert. |
False |
| limit | int | Optional | Gibt die maximale Anzahl aufeinanderfolgender Füllungen an. Wenn beispielsweiselimit=1gesetzt wird, bedeutet das, dass jeweils nur 1 fehlender Wert auf einmal gefüllt wird. |
Keine |
| downcast | dict oder str | Optional | Gibt die Regeln für das Downcasting von Datentypen an, z. B. die Konvertierung von float64 in int64. | Keine |
Beschreibung des Rückgabewerts
- Gibt ein neues DataFrame zurück (wenn
inplace=False), oderNone(wenninplace=True)。 - Im zurückgegebenen DataFrame wurden fehlende Werte gefüllt.
Beispiele
Lassen Sie uns anhand einer Reihe von Beispielen gründlich meistern:fillna()die Verwendung von df.fillna().
Beispiel 1: Alle fehlenden Werte mit einer Konstante füllen
Die einfachste Verwendung besteht darin, alle fehlenden Werte mit einer Konstante zu füllen.
Beispiel
import numpy as np
# DataFrame mit fehlenden Werten erstellen
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
'Age': [25, np.nan, 35, np.nan], # fehlender Wert
'Salary': [5000, 6000, np.nan, 8000], # fehlender Wert
'Department': ['Technology', 'Marketing', 'Technology', np.nan] # fehlender Wert
}
df = pd.DataFrame(data)
print("Originaldaten:")
print(df)
print("=" * 50)
# Alle fehlenden Werte mit der Konstante 0 füllen
df_filled = df.fillna(0)
print("Daten nach dem Füllen mit 0:")
print(df_filled)
Erwartete Ausgabe:
原始数据:
姓名 年龄 薪资 部门
0 张三 25.0 5000.0 技术
1 李四 NaN 6000.0 市场
2 王五 35.0 NaN 技术
3 赵六 NaN 8000.0 NaN
==================================================
用0填充后的数据:
名称 年龄 薪资 部门
0 张三 25.0 5000.0 技术
1 李四 0.0 6000.0 市场
2 王五 35.0 0.0 技术
3 赵六 0.0 8000.0 0
Code-Erklärung:
- Wir haben ein DataFrame mit mehreren fehlenden Werten erstellt.
- Verwenden Sie
df.fillna(0)um alle fehlenden Werte durch 0 zu ersetzen. - Diese Methode ist einfach und direkt, kann aber nicht für alle Szenarien geeignet sein; zum Beispiel ist es möglicherweise nicht sinnvoll, Alter und Gehalt mit 0 zu füllen.
Beispiel 2: Unterschiedliche Füllwerte für unterschiedliche Spalten mit einem Dictionary angeben
Sie können unterschiedliche Füllwerte für unterschiedliche Spalten angeben, um die Daten sinnvoller zu machen.
Beispiel
import numpy as np
# DataFrame mit fehlenden Werten erstellen
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
'Age': [25, np.nan, 35, np.nan],
'Salary': [5000, 6000, np.nan, 8000],
'Department': ['Technology', 'Marketing', 'Technology', np.nan],
'Performance': [85, 90, np.nan, 95]
}
df = pd.DataFrame(data)
print("Originaldaten:")
print(df)
print("=" * 50)
# Ein Dictionary verwenden, um unterschiedliche Füllwerte für unterschiedliche Spalten anzugeben
fill_values = {
'Age': 30, # Fehlende Altersangaben mit 30 füllen
'Salary': 6500, # Fehlende Gehälter mit 6500 füllen
'Department': 'Unassigned', # Fehlende Abteilungen mit "Unassigned" füllen
'Performance': 80 # Fehlende Performance mit 80 füllen
}
df_filled = df.fillna(fill_values)
print("Daten nach dem Füllen verschiedener Spalten mit unterschiedlichen Werten:")
print(df_filled)
Erwartete Ausgabe:
原始数据:
姓名 年龄 薪资 部门 绩效
0 张三 25.0 5000.0 技术 85
1 李四 NaN 6000.0 市场 90
2 王五 35.0 NaN 技术 NaN
3 赵六 NaN 8000.0 NaN 95
==================================================
不同列用不同值填充后的数据:
姓名 年龄 薪资 部门 绩效
0 张三 25.0 5000.0 技术 85
1 李四 30.0 6000.0 市场 90
2 王五 35.0 6500.0 技术 80
3 赵六 30.0 8000.0 未分配 95
Code-Erklärung:
- Mithilfe des Wörterbuchs
fill_values, haben wir sinnvolle Füllwerte für jede Spalte angegeben. - Diese Methode ist flexibler und ermöglicht das Festlegen geeigneter Standardwerte für verschiedene Felder basierend auf der Geschäftslogik.
Beispiel 3: Numerische Spalten mit Mittelwert oder Median füllen
Für numerische Daten ist das Füllen mit dem Mittelwert oder Median eine gängige und sinnvolle Methode.
Beispiel
import numpy as np
# DataFrame mit fehlenden Werten erstellen
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
'Math': [85, 90, np.nan, 78, 92],
'English': [88, np.nan, 82, 85, 90],
'Physics': [np.nan, 85, 90, 88, 95]
}
df = pd.DataFrame(data)
print("Originaldaten:")
print(df)
print("=" * 50)
# Berechne den Mittelwert jeder Spalte
math_mean = df['Math'].mean()
english_mean = df['English'].mean()
physics_mean = df['Physics'].mean()
print(f"Mathe-Mittelwert: {math_mean:.2f}")
print(f"Englisch-Mittelwert: {english_mean:.2f}")
print(f"Physik-Mittelwert: {physics_mean:.2f}")
print("=" * 50)
# Mit Mittelwert füllen
df_filled = df.fillna({
'Math': math_mean,
'English': english_mean,
'Physics': physics_mean
})
print("Daten nach dem Füllen mit dem Mittelwert:")
print(df_filled)
Erwartete Ausgabe:
原始数据:
姓名 数学 英语 物理
0 张三 85.0 88.0 NaN
1 李四 90.0 NaN 85.0
2 王五 NaN 82.0 90.0
3 赵六 78.0 85.0 88.0
4 钱七 92.0 90.0 95.0
==================================================
数学均值: 86.25
英语均值: 86.25
物理均值: 89.50
==================================================
用均值填充后的数据:
姓名 数学 英语 物理
0 张三 85.0 88.0 89.5
1 李四 90.0 86.25 85.0
2 王五 86.25 82.0 90.0
3 赵六 78.0 85.0 88.0
4 钱七 92.0 90.0 95.0
Code-Erklärung:
- Verwenden Sie
df['列名'].mean()um den Mittelwert jeder Spalte zu berechnen. - Die Verwendung des berechneten Mittelwerts als Füllwert bewahrt die Gesamtverteilungseigenschaften der Daten und löst gleichzeitig das Problem fehlender Werte.
Beispiel 4: Vorwärtsfüllung (ffill) und Rückwärtsfüllung (bfill) verwenden
Vorwärtsfüllung füllt fehlende Werte mit dem vorherigen gültigen Wert, und Rückwärtsfüllung füllt fehlende Werte mit dem nächsten gültigen Wert.
Beispiel
import numpy as np
# DataFrame mit fehlenden Werten erstellen
data = {
'Datum': ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'],
'Temperature': [20, np.nan, 22, np.nan, 25],
'Humidity': [60, 65, np.nan, 70, 75]
}
df = pd.DataFrame(data)
print("Originaldaten:")
print(df)
print("=" * 50)
# Vorwärtsfüllung: fehlende Werte mit dem vorherigen Wert füllen
df_ffill = df.fillna(method='ffill')
print("Daten nach Vorwärtsfüllung (ffill):")
print(df_ffill)
print("=" * 50)
# Rückwärts-Auffüllen: fehlende Werte mit dem nächsten Wert füllen
df_bfill = df.fillna(method='bfill')
print("Daten nach Rückwärts-Auffüllen (bfill):")
print(df_bfill)
Erwartete Ausgabe:
原始数据:
日期 温度 湿度
0 2024-01-01 20.0 60.0
1 2024-01-02 NaN 65.0
2 2024-01-03 22.0 NaN
3 2024-01-04 NaN 70.0
4 2024-01-05 25.0 75.0
==================================================
向前填充(ffill)后的数据:
日期 温度 湿度
0 2024-01-01 20.0 60.0
1 2024-01-02 20.0 65.0 # 用前一个值20填充
2 2024-01-03 22.0 65.0 # 用前一个值65填充
3 2024-01-04 22.0 70.0 # 用前一个值22填充
4 2024-01-05 25.0 75.0
==================================================
向后填充(bfill)后的数据:
日期 温度 湿度
0 2024-01-01 20.0 60.0
1 2024-01-02 22.0 65.0 # 用后一个值22填充
2 2024-01-03 22.0 70.0 # 用后一个值70填充
填充
3 2024-01-04 25.0 70.0 # 用后一个值25填充
4 2024-01-05 25.0 75.0
Code-Erklärung:
- Vorwärts-Auffüllen (
ffill): Die Temperatur in Zeile 1 fehlt; füllen Sie sie mit 20 aus Zeile 0 auf; die Temperatur in Zeile 3 fehlt; füllen Sie sie mit 22 aus Zeile 2 auf. - Rückwärts-Auffüllen (
bfill): Die Temperatur in Zeile 1 fehlt; füllen Sie sie mit 22 aus Zeile 2 auf; die Temperatur in Zeile 3 fehlt; füllen Sie sie mit 25 aus Zeile 4 auf. - Diese Methode eignet sich für Zeitreihendaten wie Aktienkurse, Temperaturaufzeichnungen usw.
Beispiel 5: Verwenden Sie den Parameter limit, um die Anzahl der Auffüllungen zu begrenzen
limitDer Parameter limit kann die maximale Anzahl aufeinanderfolgender Auffüllungen begrenzen.
Beispiel
import numpy as np
# Erstellen Sie ein DataFrame, das mehrere aufeinanderfolgende fehlende Werte enthält
data = {
'A': [1, np.nan, np.nan, np.nan, 5],
'B': [1, 2, np.nan, np.nan, 5]
}
df = pd.DataFrame(data)
print("Originaldaten:")
print(df)
print("=" * 50)
# Vorwärtsauffüllung, aber begrenzt auf das Auffüllen von jeweils nur 1 aufeinanderfolgendem fehlenden Wert
df_filled = df.fillna(method='ffill', limit=1)
print(Daten nach Begrenzung der Anzahl aufeinanderfolgender Auffüllungen auf 1:)
print(df_filled)
Erwartete Ausgabe:
原始数据:
A B
0 1.0 1.0
1 NaN 2.0
2 NaN NaN
3 NaN NaN
4 5.0 5.0
==================================================
限制连续填充数量为1后的数据:
A B
0 1.0 1.0
1 1.0 2.0 # 填充1个
2 NaN 2.0 # 达到limit,不再填充
3 NaN NaN # 继续不填充
4 5.0 5.0
Code-Erklärung:
- Für Spalte A wird der fehlende Wert in Zeile 1 mit 1 gefüllt, aber die Zeilen 2 und 3 werden nicht mehr gefüllt, weil limit=1 erreicht ist.
- Für Spalte B wird der fehlende Wert in Zeile 2 mit 2 gefüllt, und Zeile 3 wird nicht mehr gefüllt, weil limit=1 erreicht ist.
Beispiel 6: Fehlende Werte durch Interpolation füllen
Pandas bietet außerdeminterpolate()eine Methode zum Interpolationsauffüllen, geeignet für numerische Daten.
Beispiel
import numpy as np
# DataFrame mit fehlenden Werten erstellen
data = {
'x': [1, 2, 3, 4, 5],
'y': [10, np.nan, 30, np.nan, 50]
}
df = pd.DataFrame(data)
print(Rohdaten:)
print(df)
print("=" * 50)
# Lineare Interpolation zum Auffüllen verwenden
df_interpolated = df.copy()
df_interpolated['y'] = df_interpolated['y'].interpolate(method='linear')
print(Daten nach dem Auffüllen durch lineare Interpolation:)
print(df_interpolated)
Erwartete Ausgabe:
原始数据: x y 0 1 10.0 1 2 NaN 2 3 30.0 3 4 NaN 4 5 50.0 ================================================== 线性插值填充后的数据: x y 0 1 10.0 1 2 20.0 # 插值:10 + (30-10)/(3-1)*(2-1) = 20 2 3 30.0 3 4 40.0 # 插值:30 + (50-30)/(5-3)*(4-3) = 40 4 5 50.0
Code-Erklärung:
- Die lineare Interpolation berechnet fehlende Werte anhand der bekannten Werte davor und danach.
- Zeile 1: 10 + (30-10)/(3-1)*(2-1) = 20.
- Zeile 3: 30 + (50-30)/(5-3)*(4-3) = 40.
- Die Interpolationsmethode eignet sich für Daten, bei denen sich Werte linear ändern.
Hinweise
fillna()Standardmäßig wird das ursprüngliche DataFrame nicht geändert. Wenn Sie an Ort und Stelle ändern möchten, verwenden Sieinplace=TrueParameter überschrieben werden.- Hinweis
methodDer Parameter ist in zukünftigen Versionen von Pandas möglicherweise veraltet. Es wird empfohlen, Folgendes zu verwendenffill()undbfill()Methode. - Wenn Sie die Mittelwertauffüllung verwenden, sollten Sie bei extremen Werten (Ausreißern) in den Daten die Medianauffüllung in Betracht ziehen, die robuster ist.
- Für kategoriale Daten (wie Abteilung, Position) wird empfohlen, mit dem häufigsten Wert (Modus) oder einer eindeutigen Kategorie (wie "Unbekannt") aufzufüllen.
- Bevor Sie fehlende Werte auffüllen, wird empfohlen, zunächst die Ursachen und Muster des Fehlens zu analysieren und die am besten geeignete Auffüllmethode zu wählen.
Weitere Erweiterungen
Pandas Häufige Funktionen