Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas index column title or name

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?

like image 482
Radical Edward Avatar asked Aug 02 '13 17:08

Radical Edward


People also ask

Can you name the index column in pandas?

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.

How do you give a column an index name?

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.

How do you name a column in pandas series?

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.


2 Answers

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 
like image 80
Jeff Avatar answered Sep 23 '22 03:09

Jeff


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 
like image 32
jezrael Avatar answered Sep 22 '22 03:09

jezrael