Renaming column names in Pandas Renaming column names in Pandas python python

Renaming column names in Pandas


Use the df.rename() function and refer the columns to be renamed. Not all the columns have to be renamed:

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 Example

df = pd.DataFrame('x', index=range(3), columns=list('abcde'))df   a  b  c  d  e0  x  x  x  x  x1  x  x  x  x  x2  x  x  x  x  x

The following methods all work and produce the same output:

df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1)  # new methoddf2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')df2 = df.rename(columns={'a': 'X', 'b': 'Y'})  # old method  df2   X  Y  c  d  e0  x  x  x  x  x1  x  x  x  x  x2  x  x  x  x  x

Remember to assign the result back, as the modification is not-inplace. Alternatively, specify inplace=True:

df.rename({'a': 'X', 'b': 'Y'}, axis=1, inplace=True)df   X  Y  c  d  e0  x  x  x  x  x1  x  x  x  x  x2  x  x  x  x  x 

From v0.25, you can also specify errors='raise' to raise errors if an invalid column-to-rename is specified. See v0.25 rename() docs.


Use df.set_axis() with axis=1 and inplace=False (to return a copy).

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

This returns a copy, but you can modify the DataFrame in-place by setting inplace=True (this is the default behaviour for versions <=0.24 but is likely to change in the future).

You can also assign headers directly:

df.columns = ['V', 'W', 'X', 'Y', 'Z']df   V  W  X  Y  Z0  x  x  x  x  x1  x  x  x  x  x2  x  x  x  x  x

Just assign it to the .columns attribute:

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

The rename method can take a function, for example:

In [11]: df.columnsOut[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.columnsOut[13]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)