Wie benenne ich eine bestimmte Spalte in Pandas um?
Ab Version 0.24 + können Sie jeweils eine (oder mehrere) Spalten umbenennen.
Wenn Sie ALLE Spalten gleichzeitig umbenennen müssen,
DataFrame.set_axis()
Methode mit axis=1
. Übergeben Sie eine listenartige Sequenz. Optionen für die direkte Änderung sind ebenfalls verfügbar.
rename
mit axis=1
df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df
y gdp cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Ab 0,21 können Sie jetzt einen axis
Parameter angeben mit rename
:
df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
(Beachten Sie, dass dies rename
nicht standardmäßig vorhanden ist, sodass Sie das Ergebnis zurückweisen müssen .)
Dieser Zusatz wurde vorgenommen, um die Konsistenz mit dem Rest der API zu verbessern. Das neue axis
Argument ist analog zum columns
Parameter - sie machen dasselbe.
df.rename(columns={'gdp': 'log(gdp)'})
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
rename
Akzeptiert auch einen Rückruf, der für jede Spalte einmal aufgerufen wird.
df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')
y g c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Für dieses spezielle Szenario möchten Sie verwenden
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
Ähnlich wie bei der replace
Methode der Zeichenfolgen in Python definieren pandas Index und Series (nur Objekttyp) eine ("vektorisierte") str.replace
Methode für das Ersetzen von Zeichenfolgen und Regex.
df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Dies hat gegenüber den anderen Methoden den Vorteil, dass str.replace
Regex unterstützt wird (standardmäßig aktiviert). Weitere Informationen finden Sie in den Dokumenten.
Übergeben einer Liste an set_axis
mitaxis=1
Rufen Sie set_axis
mit einer Liste von Headern an. Die Liste muss der Spalten- / Indexgröße entsprechen. set_axis
mutiert standardmäßig den ursprünglichen DataFrame, Sie können jedoch angeben inplace=False
, dass eine geänderte Kopie zurückgegeben werden soll.
df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)
cap log(gdp) y
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Hinweis: In zukünftigen Versionen inplace
wird standardmäßig verwendet True
.
Methodenverkettung
Warum wählen, set_axis
wenn wir bereits eine effiziente Möglichkeit haben, Spalten zuzuweisen df.columns = ...
? Wie von Ted Petrou in [dieser Antwort] gezeigt ( https://stackoverflow.com/a/46912050/4909087 )set_axis
hilfreich, wenn Sie versuchen, Methoden zu verketten.
Vergleichen Sie
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
Gegen
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
Ersteres ist eine natürlichere und frei fließende Syntax.