API · Pandas
Pandas DataFrame DataFrame.interpolate()-Funktion
Die Funktion DataFrame interpolate() füllt die NaN-Werte im DataFrame mit Hilfe der Interpolationstechnik.
Auf dieser Seite
Die Python-Pandas-Methode DataFrame.interpolate() schätzt fehlende Werte anhand benachbarter Werte entlang einer ausgewählten Achse. Eine Lücke im Inneren kann gefüllt werden, wenn sie von verwendbaren Werten umgeben ist. Fehlen ausreichende Informationen in den Daten, können Werte weiterhin fehlen. (NaN)
Syntax und Parameter von pandas.DataFrame.interpolate()
Der Methodenaufruf hat allgemein folgende Form:
DataFrame.interpolate(method="linear", axis=0, limit=None, inplace=False, limit_direction="forward", limit_area=None, **kwargs)
Die Beispiele verwenden kleine numerische DataFrames, deren Eingabedaten Sie an Ihre eigenen Daten anpassen können.
| Parameter | Funktion |
|---|---|
method |
Legt das Interpolationsverfahren fest. Dieser Artikel behandelt die Standardmethode linear und time. Welche Optionen Ihre installierte Version unterstützt, erfahren Sie in der pandas-API-Dokumentation. |
axis |
Legt die Richtung der Interpolation fest: 0 arbeitet innerhalb jeder Spalte zeilenweise nach unten, 1 innerhalb jeder Zeile spaltenweise. |
limit |
Gibt an, wie viele direkt aufeinanderfolgende fehlende Werte in einer Lücke höchstens gefüllt werden. |
limit_direction |
Legt zusammen mit limit fest, ob das Füllen am Anfang ("forward"), am Ende ("backward") oder an beiden Enden ("both") einer Lücke beginnt. |
inplace |
Bei True wird der ursprüngliche DataFrame geändert. Standardmäßig ist der Wert False. |
limit_area |
Kann bei gesetztem limit zusätzlich einschränken, an welchen Stellen Werte gefüllt werden. In den Beispielen wird dieser Parameter nicht verwendet. |
**kwargs |
Zusätzliche Schlüsselwortargumente, die das ausgewählte Interpolationsverfahren akzeptiert. Ihre Bedeutung hängt vom jeweiligen Verfahren ab. |
Fehlende Werte mit der Standardmethode interpolieren
Bei der Standardoption method="linear" behandelt pandas die Positionen entlang der ausgewählten Achse als gleichmäßig verteilt. Im Beispiel wird der Wert zwischen 10 und 30 auf 20 geschätzt. Der abschließende fehlende Wert wird mit 30.0 gefüllt, indem der letzte bekannte Wert fortgeschrieben wird.
Führen Sie dieses Beispiel aus:
import pandas as pd
df = pd.DataFrame({"temperature": [10.0, None, 30.0, None]})
result = df.interpolate()
print(result)
temperature
0 10.0
1 20.0
2 30.0
3 30.0
Verwenden Sie Interpolation, wenn ein fehlender Wert anhand benachbarter Beobachtungen geschätzt werden soll. pandas.DataFrame.fillna() ersetzt fehlende Werte dagegen durch einen festgelegten Wert oder mit einer anderen angegebenen Füllstrategie. Welche Methode passt, hängt von den Daten und der jeweiligen Aufgabe ab.
Ein Interpolationsverfahren auswählen
Lassen Sie method für gewöhnliche numerische Messwerte, deren Zeilenpositionen gleichmäßig verteilt sind, auf dem Standardwert. Bei einem zeitindizierten DataFrame berücksichtigt method="time" die durch den Index dargestellten Zeitabstände, um Werte zu schätzen. Das ist nützlich, wenn die Beobachtungen zeitlich nicht gleichmäßig verteilt sind. Das folgende zeitbasierte Beispiel zeigt die erforderliche Indexstruktur.
Die verfügbaren Verfahren und ihre Voraussetzungen können je nach pandas-Version variieren. Prüfen Sie die API-Dokumentation für Ihre Version, bevor Sie ein anderes Verfahren auswählen oder verfahrensspezifische Schlüsselwortargumente übergeben.
Die Interpolationsachse auswählen
Standardmäßig füllt axis=0 Werte innerhalb jeder Spalte zeilenweise nach unten. Mit axis=1 erfolgt das Füllen innerhalb jeder Zeile über die Spalten hinweg. Bei axis=1 wird beispielsweise ein fehlender Wert zwischen 10 und 30 in einer Zeile auf 20 geschätzt. Enthält eine Zeile keine bekannten Werte, gibt es keine Grundlage für eine Schätzung; ihre Einträge bleiben daher fehlend.
import pandas as pd
df = pd.DataFrame(
{"morning": [10.0, None], "afternoon": [None, None], "evening": [30.0, None]},
dtype="float64",
)
print(df.interpolate(axis=1))
morning afternoon evening
0 10.0 20.0 30.0
1 NaN NaN NaN
Der ausdrücklich angegebene numerische Datentyp sorgt außerdem dafür, dass eine vollständig fehlende Spalte numerisch bleibt und die Interpolation über die Zeile hinweg funktioniert. In diesem axis=1-Beispiel bestimmen die Positionen der Spalten und nicht ihre Namen den gleichmäßigen Abstand für die lineare Interpolation.
Aufeinanderfolgende fehlende Werte begrenzen und die Richtung festlegen
Mit limit legen Sie fest, wie viele direkt aufeinanderfolgende fehlende Einträge pandas in jeder Lücke höchstens füllt. limit_direction bestimmt zusammen mit dieser Obergrenze die Füllrichtung. Bei einer Lücke aus drei Werten zwischen 0 und 40 füllt limit=1 mit der Vorwärtsrichtung die erste fehlende Position von oben. Bei der Rückwärtsrichtung wird die letzte fehlende Position von unten gefüllt. Die übrigen fehlenden Positionen bleiben unverändert.
import pandas as pd
df = pd.DataFrame({"reading": [0.0, None, None, None, 40.0]})
print("Forward:")
print(df.interpolate(limit=1, limit_direction="forward"))
print("Backward:")
print(df.interpolate(limit=1, limit_direction="backward"))
Forward:
reading
0 0.0
1 10.0
2 NaN
3 NaN
4 40.0
Backward:
reading
0 0.0
1 NaN
2 NaN
3 30.0
4 40.0
Verwenden Sie limit_direction="both", wenn das Füllen von beiden Enden aus sinnvoll ist. Prüfen Sie die resultierenden Daten, wenn eine Lücke länger als das festgelegte Limit ist.
Werte in zeitindizierten Daten interpolieren
Verwenden Sie für die Zeitinterpolation einen DatetimeIndex, damit die Datumsangaben und Zeitabstände Indexwerte sind und nicht als Zeichenfolgen in einer gewöhnlichen Spalte stehen. Der 2. Januar liegt zeitlich ein Drittel des Weges zwischen dem 1. und dem 4. Januar. Entsprechend liegt der interpolierte Wert ein Drittel des Weges zwischen 10 und 30 und ergibt 16.666667.
import pandas as pd
index = pd.to_datetime(["2024-01-01", "2024-01-02", "2024-01-04"])
df = pd.DataFrame({"value": [10.0, None, 30.0]}, index=index)
print(df.interpolate(method="time"))
value
2024-01-01 10.000000
2024-01-02 16.666667
2024-01-04 30.000000
Behalten Sie bei der Zeitinterpolation den Datum-Zeit-Index bei. Werden die Datumsangaben in eine gewöhnliche Textspalte umgewandelt, stehen dem Verfahren die verwendeten Zeitabstände nicht zur Verfügung.
Rückgabewert und Verhalten mit inplace
Standardmäßig gibt DataFrame.interpolate() einen neuen DataFrame mit dem Interpolationsergebnis zurück; das ursprüngliche Objekt bleibt unverändert. Mit inplace=True wird der ursprüngliche DataFrame geändert und None zurückgegeben. Weisen Sie das Ergebnis daher nur bei Verwendung des Standardverhaltens einer Variable zu.
import pandas as pd
df = pd.DataFrame({"reading": [1.0, None, 3.0]})
result = df.interpolate(inplace=True)
print(result)
print(df)
reading
0 1.0
1 2.0
2 3.0
reading
0 1.0
1 2.0
2 3.0
Der erste ausgegebene Wert ist None, der zweite der geänderte DataFrame.