Přejmenování sloupců v programu pandas

Mám DataFrame používající pandas a popisky sloupců, které potřebuji upravit, abych nahradil původní popisky sloupců.

Chtěl bych změnit názvy sloupců v DataFrame A, kde jsou původní názvy sloupců:

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

na

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

Upravené názvy sloupců mám uložené v seznamu, ale nevím, jak je nahradit.

PŘEJMENOVÁNÍ KONKRÉTNÍCH SLOUPCŮ

Použijte funkci [df.rename()][1] a odkažte na sloupce, které chcete přejmenovat. Není nutné přejmenovat všechny sloupce:

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)

Příklad minimálního kódu

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

Následující metody fungují a poskytují stejný výstup:

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

Nezapomeňte výsledek přiřadit zpět, protože změna není na místě. Případně zadejte inplace=True:

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

Od verze 0.25 můžete také zadat errors='raise', abyste vyvolali chybu, pokud je zadán neplatný název sloupce. Viz v0.25 rename() docs.


PŘEŘAZENÍ ZÁHLAVÍ SLOUPCŮ

Použijte df.set_axis() s axis=1 a inplace=False (pro vrácení kopie).

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

Vrátí se kopie, ale DataFrame můžete upravit na místě nastavením inplace=True (toto je výchozí chování pro verze

Komentáře (8)
Řešení

Stačí jej přiřadit atributu .columns:

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

Metoda rename může přebírat například funkci:

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)
Komentáře (3)