How do I get the index column name in python pandas? Here's an example dataframe:
             Column 1 Index Title           Apples              1 Oranges             2 Puppies             3 Ducks               4     What I'm trying to do is get/set the dataframe index title. Here is what i tried:
import pandas as pd data = {'Column 1'     : [1., 2., 3., 4.],         'Index Title'  : ["Apples", "Oranges", "Puppies", "Ducks"]} df = pd.DataFrame(data) df.index = df["Index Title"] del df["Index Title"] print df   Anyone know how to do this?
You can rename (change) column/index names of pandas. DataFrame by using rename() , add_prefix() , add_suffix() , set_axis() methods or updating the columns / index attributes. You can also rename index names (labels) of pandas.
To set a column as index for a DataFrame, use DataFrame. set_index() function, with the column name passed as argument. You can also setup MultiIndex with multiple columns in the index. In this case, pass the array of column names required for index, to set_index() method.
Method 1: Using rename() function One way of renaming the columns in a Pandas Dataframe is by using the rename() function. This method is quite useful when we need to rename some selected columns because we need to specify information only for the columns which are to be renamed. Example 1: Rename a single column.
You can just get/set the index via its name property
In [7]: df.index.name Out[7]: 'Index Title'  In [8]: df.index.name = 'foo'  In [9]: df.index.name Out[9]: 'foo'  In [10]: df Out[10]:           Column 1 foo               Apples          1 Oranges         2 Puppies         3 Ducks           4 
                        You can use rename_axis, for removing set to None:
d = {'Index Title': ['Apples', 'Oranges', 'Puppies', 'Ducks'],'Column 1': [1.0, 2.0, 3.0, 4.0]} df = pd.DataFrame(d).set_index('Index Title') print (df)              Column 1 Index Title           Apples            1.0 Oranges           2.0 Puppies           3.0 Ducks             4.0  print (df.index.name) Index Title  print (df.columns.name) None   The new functionality works well in method chains.
df = df.rename_axis('foo') print (df)          Column 1 foo               Apples        1.0 Oranges       2.0 Puppies       3.0 Ducks         4.0   You can also rename column names with parameter axis:
d = {'Index Title': ['Apples', 'Oranges', 'Puppies', 'Ducks'],'Column 1': [1.0, 2.0, 3.0, 4.0]} df = pd.DataFrame(d).set_index('Index Title').rename_axis('Col Name', axis=1) print (df) Col Name     Column 1 Index Title           Apples            1.0 Oranges           2.0 Puppies           3.0 Ducks             4.0  print (df.index.name) Index Title  print (df.columns.name) Col Name     print df.rename_axis('foo').rename_axis("bar", axis="columns") bar      Column 1 foo               Apples        1.0 Oranges       2.0 Puppies       3.0 Ducks         4.0  print df.rename_axis('foo').rename_axis("bar", axis=1) bar      Column 1 foo               Apples        1.0 Oranges       2.0 Puppies       3.0 Ducks         4.0   From version pandas 0.24.0+ is possible use parameter index and columns:
df = df.rename_axis(index='foo', columns="bar") print (df) bar      Column 1 foo               Apples        1.0 Oranges       2.0 Puppies       3.0 Ducks         4.0   Removing index and columns names means set it to None:
df = df.rename_axis(index=None, columns=None) print (df)          Column 1 Apples        1.0 Oranges       2.0 Puppies       3.0 Ducks         4.0   If MultiIndex in index only:
mux = pd.MultiIndex.from_arrays([['Apples', 'Oranges', 'Puppies', 'Ducks'],                                   list('abcd')],                                    names=['index name 1','index name 1'])   df = pd.DataFrame(np.random.randint(10, size=(4,6)),                    index=mux,                    columns=list('ABCDEF')).rename_axis('col name', axis=1) print (df) col name                   A  B  C  D  E  F index name 1 index name 1                   Apples       a             5  4  0  5  2  2 Oranges      b             5  8  2  5  9  9 Puppies      c             7  6  0  7  8  3 Ducks        d             6  5  0  1  6  0   print (df.index.name) None  print (df.columns.name) col name  print (df.index.names) ['index name 1', 'index name 1']  print (df.columns.names) ['col name']   df1 = df.rename_axis(('foo','bar')) print (df1) col name     A  B  C  D  E  F foo     bar                   Apples  a    5  4  0  5  2  2 Oranges b    5  8  2  5  9  9 Puppies c    7  6  0  7  8  3 Ducks   d    6  5  0  1  6  0  df2 = df.rename_axis('baz', axis=1) print (df2) baz                        A  B  C  D  E  F index name 1 index name 1                   Apples       a             5  4  0  5  2  2 Oranges      b             5  8  2  5  9  9 Puppies      c             7  6  0  7  8  3 Ducks        d             6  5  0  1  6  0  df2 = df.rename_axis(index=('foo','bar'), columns='baz') print (df2) baz          A  B  C  D  E  F foo     bar                   Apples  a    5  4  0  5  2  2 Oranges b    5  8  2  5  9  9 Puppies c    7  6  0  7  8  3 Ducks   d    6  5  0  1  6  0   Removing index and columns names means set it to None:
df2 = df.rename_axis(index=(None,None), columns=None) print (df2)             A  B  C  D  E  F Apples  a  6  9  9  5  4  6 Oranges b  2  6  7  4  3  5 Puppies c  6  3  6  3  5  1 Ducks   d  4  9  1  3  0  5   For MultiIndex in index and columns is necessary working with .names instead .name and set by list or tuples:
mux1 = pd.MultiIndex.from_arrays([['Apples', 'Oranges', 'Puppies', 'Ducks'],                                   list('abcd')],                                    names=['index name 1','index name 1'])   mux2 = pd.MultiIndex.from_product([list('ABC'),                                   list('XY')],                                    names=['col name 1','col name 2'])  df = pd.DataFrame(np.random.randint(10, size=(4,6)), index=mux1, columns=mux2) print (df) col name 1                 A     B     C    col name 2                 X  Y  X  Y  X  Y index name 1 index name 1                   Apples       a             2  9  4  7  0  3 Oranges      b             9  0  6  0  9  4 Puppies      c             2  4  6  1  4  4 Ducks        d             6  6  7  1  2  8   Plural is necessary for check/set values:
print (df.index.name) None  print (df.columns.name) None  print (df.index.names) ['index name 1', 'index name 1']  print (df.columns.names) ['col name 1', 'col name 2']   df1 = df.rename_axis(('foo','bar')) print (df1) col name 1   A     B     C    col name 2   X  Y  X  Y  X  Y foo     bar                   Apples  a    2  9  4  7  0  3 Oranges b    9  0  6  0  9  4 Puppies c    2  4  6  1  4  4 Ducks   d    6  6  7  1  2  8  df2 = df.rename_axis(('baz','bak'), axis=1) print (df2) baz                        A     B     C    bak                        X  Y  X  Y  X  Y index name 1 index name 1                   Apples       a             2  9  4  7  0  3 Oranges      b             9  0  6  0  9  4 Puppies      c             2  4  6  1  4  4 Ducks        d             6  6  7  1  2  8  df2 = df.rename_axis(index=('foo','bar'), columns=('baz','bak')) print (df2) baz          A     B     C    bak          X  Y  X  Y  X  Y foo     bar                   Apples  a    2  9  4  7  0  3 Oranges b    9  0  6  0  9  4 Puppies c    2  4  6  1  4  4 Ducks   d    6  6  7  1  2  8   Removing index and columns names means set it to None:
df2 = df.rename_axis(index=(None,None), columns=(None,None)) print (df2)             A     B     C               X  Y  X  Y  X  Y Apples  a  2  0  2  5  2  0 Oranges b  1  7  5  5  4  8 Puppies c  2  4  6  3  6  5 Ducks   d  9  6  3  9  7  0   And @Jeff solution:
df.index.names = ['foo','bar'] df.columns.names = ['baz','bak'] print (df)  baz          A     B     C    bak          X  Y  X  Y  X  Y foo     bar                   Apples  a    3  4  7  3  3  3 Oranges b    1  2  5  8  1  0 Puppies c    9  6  3  9  6  3 Ducks   d    3  2  1  0  1  0 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With