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