Ich habe vor kurzem mit Pandas arbeiten begonnen und ich versuche, einige einfache Reinigung in Daten zu tun. Bisher habe ich gelernt, dass es bei der Verwendung von Pandas viele Einzeiler gibt. So suche ich auch in meinem Fall nach einem. Ich habe DataFrame
wie folgt aus:Pandas - ersetzen NaN-Werte mit Werten aus anderen Spalten
C0 C1 C2 C3 C4
3789507 2010 NaN NaN NaN
3789508 NaN NaN 2010 NaN
3789509 NaN NaN 2016 NaN
3789510 NaN 2014 NaN NaN
3789511 NaN NaN NaN 2014
ich mit so etwas landen wollen:
C0 C1
3789507 2010
3789508 2010
3789509 2016
3789510 2014
3789511 2014
Was ich jetzt tue, ist einfach:
k = df.C1.isnull()
df.C1[k] = df.C2[k]
k = df.C1.isnull()
df.C1[k] = df.C3[k]
k = df.C1.isnull()
df.C1[k] = df.C4[k]
Es funktioniert, aber ist nicht die schönste Lösung. Was ist, wenn ich 100 Spalten habe? Ist Schleife hier nur Lösung?
Nur für den Fall meiner for-Schleife sieht wie folgt aus:
for i in range(2,len(df.columns)):
k = df.C1.isnull()
df.C1[k] = df.ix[:,i]
Nur eine Frage - wenn es kein großes Problem ist, kannst du bitte erklären, wie es wirklich funktioniert? Sollte ich es von hinten lesen? Ich meine diesen realen Fall mit ausgewählten Spalten. – sebap123
OK, schauen Sie sich die Zeile an, in der 'C4' einen Wert hat, aber die anderen Spalten fehlen. 'df.bfill (axis = 'columns')' erstellt ein neues Datenframe, wobei jeder fehlende Wert links von 'C4' in dieser Zeile den Wert von' C4' erhält. Der gültige Wert in "C4" wird in alle fehlenden Spalten "gefüllt". Dann kopieren wir einfach die hinterfüllte C1-Spalte in den ursprünglichen Datenrahmen. – Marius
Vielen Dank - jetzt verstehe ich es. – sebap123