Umbenennen von Spalten in Pandas

Ich habe einen DataFrame mit Pandas und Spaltenbeschriftungen, die ich bearbeiten muss, um die ursprünglichen Spaltenbeschriftungen zu ersetzen.

Ich möchte die Spaltennamen in einem DataFrame "A" ändern, wo die ursprünglichen Spaltennamen sind:

['$a', '$b', '$c', '$d', '$e'] 

in

['a', 'b', 'c', 'd', 'e'].

Ich habe die bearbeiteten Spaltennamen in einer Liste gespeichert, aber ich weiß nicht, wie ich die Spaltennamen ersetzen kann.

BESTIMMTE SPALTEN UMBENENNEN

Verwenden Sie die Funktion [df.rename()][1] und geben Sie die Spalten an, die umbenannt werden sollen. Es müssen nicht alle Spalten umbenannt werden:

df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# Or rename the existing DataFrame (rather than creating a copy) 
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)

Minimal Code Beispiel

df = pd.DataFrame('x', index=range(3), columns=list('abcde'))
df

   a  b  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

Die folgenden Methoden funktionieren alle und erzeugen die gleiche Ausgabe:

df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1)  # new method
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')
df2 = df.rename(columns={'a': 'X', 'b': 'Y'})  # old method  

df2

   X  Y  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

Denken Sie daran, das Ergebnis zurückzugeben, da die Änderung nicht an Ort und Stelle erfolgt. Alternativ können Sie auch inplace=True angeben:

df.rename({'a': 'X', 'b': 'Y'}, axis=1, inplace=True)
df

   X  Y  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

Ab v0.25 können Sie auch errors='raise' angeben, um Fehler zu melden, wenn eine ungültige Spalte zum Umbenennen angegeben wird. Siehe v0.25 rename() docs.


SPALTENÜBERSCHRIFTEN NEU ZUORDNEN

Verwenden Sie df.set_axis() mit axis=1 und inplace=False (um eine Kopie zurückzugeben).

df2 = df.set_axis(['V', 'W', 'X', 'Y', 'Z'], axis=1, inplace=False)
df2

   V  W  X  Y  Z
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

Dies gibt eine Kopie zurück, aber Sie können den DataFrame an Ort und Stelle verändern, indem Sie inplace=True setzen (dies ist das Standardverhalten für die Versionen

Kommentare (8)
Lösung

Weisen Sie es einfach dem Attribut .columns zu:

>>> df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
>>> df.columns = ['a', 'b']
>>> df
   a   b
0  1  10
1  2  20
Kommentare (13)

Die Methode rename kann zum Beispiel eine Funktion annehmen:

In [11]: df.columns
Out[11]: Index([u'$a', u'$b', u'$c', u'$d', u'$e'], dtype=object)

In [12]: df.rename(columns=lambda x: x[1:], inplace=True)

In [13]: df.columns
Out[13]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)
Kommentare (3)