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 axisParameter 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 renamenicht 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 axisArgument ist analog zum columnsParameter - 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 replaceMethode der Zeichenfolgen in Python definieren pandas Index und Series (nur Objekttyp) eine ("vektorisierte") str.replaceMethode 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.replaceRegex unterstützt wird (standardmäßig aktiviert). Weitere Informationen finden Sie in den Dokumenten.
Übergeben einer Liste an set_axismitaxis=1
Rufen Sie set_axismit einer Liste von Headern an. Die Liste muss der Spalten- / Indexgröße entsprechen. set_axismutiert 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 inplacewird standardmäßig verwendet True.
Methodenverkettung
Warum wählen, set_axiswenn 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.