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
Answer from Jeff on Stack OverflowPandas
pandas.pydata.org โบ docs โบ reference โบ api โบ pandas.Index.set_names.html
pandas.Index.set_names โ pandas 3.0.2 documentation
>>> idx = pd.Index([1, 2, 3, 4]) >>> idx Index([1, 2, 3, 4], dtype='int64') >>> idx.set_names("quarter") Index([1, 2, 3, 4], dtype='int64', name='quarter')
Pandas
pandas.pydata.org โบ docs โบ reference โบ api โบ pandas.DataFrame.set_index.html
pandas.DataFrame.set_index โ pandas 3.0.3 documentation
Set the DataFrame index (row labels) using one or more existing columns or arrays (of the correct length).
Videos
Top answer 1 of 10
629
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
2 of 10
142
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
Pandas
pandas.pydata.org โบ docs โบ reference โบ api โบ pandas.Index.rename.html
pandas.Index.rename โ pandas 3.0.3 documentation - PyData |
Able to set new names partially and by level. ... >>> idx = pd.Index(["A", "C", "A", "B"], name="score") >>> idx.rename("grade") Index(['A', 'C', 'A', 'B'], dtype='str', name='grade')
Pandas
pandas.pydata.org โบ docs โบ reference โบ api โบ pandas.Index.name.html
pandas.Index.name โ pandas 3.0.2 documentation - PyData |
Able to set new names partially and by level. ... Corresponding Series property. ... >>> idx = pd.Index([1, 2, 3], name="x") >>> idx Index([1, 2, 3], dtype='int64', name='x') >>> idx.name 'x'
Pandas
pandas.pydata.org โบ pandas-docs โบ stable โบ reference โบ api โบ pandas.Index.rename.html
pandas.Index.rename โ pandas 3.0.2 documentation
Able to set new names partially and by level. ... >>> idx = pd.Index(["A", "C", "A", "B"], name="score") >>> idx.rename("grade") Index(['A', 'C', 'A', 'B'], dtype='str', name='grade')
Python Examples
pythonexamples.org โบ pandas-set-column-as-index
Set Column as Index in Pandas DataFrame - Examples
Pandas โ Set Column as Index: 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() ...
Pandas
pandas.pydata.org โบ pandas-docs โบ version โบ 2.2.2 โบ reference โบ api โบ pandas.Index.set_names.html
pandas.Index.set_names โ pandas 2.2.2 documentation
>>> idx = pd.Index([1, 2, 3, 4]) >>> idx Index([1, 2, 3, 4], dtype='int64') >>> idx.set_names('quarter') Index([1, 2, 3, 4], dtype='int64', name='quarter')
PYnative
pynative.com โบ home โบ python โบ pandas โบ set index in pandas dataframe
Set index in pandas DataFrame
March 9, 2023 - Here, we are passing two parameters to the DataFrame.set_index() function. The first parameter is the Python Index created using multiple strings of size matches to the length of DataFrame. The second parameter is the existing column label โNameโ of student DataFrame. import pandas as pd ...
Pandas
pandas.pydata.org โบ docs โบ reference โบ api โบ pandas.Index.names.html
pandas.Index.names โ pandas 3.0.2 documentation - PyData |
A FrozenList containing the objectโs names, contains None if the object does not have a name. ... Index name as a string, or None for MultiIndex.
Codegive
codegive.com โบ blog โบ pandas_set_index.php
Mastering <code>pandas set index</code>: Unlock Data Power for Faster Analysis & Clarity!
To set a column as the index in pandas, use the df.set_index('column_name') method. This creates a new DataFrame with the specified column moved to the index, which can improve data access and organization.
pandas
pandas.pydata.org โบ pandas-docs โบ dev โบ reference โบ api โบ pandas.Index.name.html
pandas.Index.name โ pandas documentation
Able to set new names partially and by level. ... Corresponding Series property. ... >>> idx = pd.Index([1, 2, 3], name="x") >>> idx Index([1, 2, 3], dtype='int64', name='x') >>> idx.name 'x'
Pandas
pandas.pydata.org โบ docs โบ reference โบ api โบ pandas.Series.name.html
pandas.Series.name โ pandas 3.0.2 documentation - PyData |
Corresponding Index property. ... The Series name can be set initially when calling the constructor.
Note.nkmk.me
note.nkmk.me โบ home โบ python โบ pandas
pandas: Set a column as the DataFrame index with set_index() | note.nkmk.me
January 26, 2024 - The set_index() method of pandas.DataFrame allows you to set an existing column as the index (row labels).