Angenommen, ich habe einen DataFrame mit einigen NaN
s:
>>> import pandas as pd
>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
>>> df
0 1 2
0 1 2 3
1 4 NaN NaN
2 NaN NaN 9
Was ich tun muss, ist, jeden NaN
durch den ersten Nichtwert NaN
in derselben Spalte darüber zu ersetzen . Es wird angenommen, dass die erste Zeile niemals ein enthält NaN
. Für das vorherige Beispiel wäre das Ergebnis also
0 1 2
0 1 2 3
1 4 2 3
2 4 2 9
Ich kann einfach den gesamten DataFrame Spalte für Spalte, Element für Element durchlaufen und die Werte direkt festlegen. Gibt es jedoch eine einfache (optimalerweise schleifenfreie) Möglichkeit, dies zu erreichen?
Sie können
pandas.DataFrame.fillna
mit dermethod='ffill'
Option verwenden.'ffill'
steht für 'Forward Fill' und verbreitet die letzte gültige Beobachtung vorwärts. Die Alternative ist,'bfill'
dass es genauso funktioniert, aber rückwärts.Es gibt auch eine direkte Synonymfunktion dafür
pandas.DataFrame.ffill
, um die Dinge einfacher zu machen.quelle
Eine Sache, die mir beim Ausprobieren dieser Lösung aufgefallen ist, ist, dass ffill und bfill nicht ganz funktionieren, wenn Sie am Anfang oder am Ende des Arrays N / A haben. Du brauchst beides.
quelle
ffill
hat jetzt seine eigene Methodepd.DataFrame.ffill
quelle
Nur eine Spaltenversion
quelle
Ich stimme nur der
ffill
Methode zu, aber eine zusätzliche Information ist, dass Sie die Vorwärtsfüllung mit dem Schlüsselwortargument begrenzen könnenlimit
.Jetzt mit
limit
Schlüsselwortargumentquelle
In meinem Fall haben wir Zeitreihen von verschiedenen Geräten, aber einige Geräte konnten während eines bestimmten Zeitraums keinen Wert senden. Wir sollten also NA-Werte für jedes Gerät und jeden Zeitraum erstellen und danach Fillna ausführen.
Ergebnis:
quelle
Sie können
fillna
NaN-Werte entfernen oder ersetzen.NaN entfernen
NaN ersetzen
Referenz pandas.DataFrame.fillna
quelle