You can just get/set the index via its name property
CopyIn [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.3 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')
Top answer 1 of 10
629
You can just get/set the index via its name property
CopyIn [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:
Copyd = {'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.
Copydf = 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:
Copyd = {'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
Copyprint 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:
Copydf = 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:
Copydf = 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:
Copymux = 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
Copyprint (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']
Copydf1 = 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:
Copydf2 = 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:
Copymux1 = 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:
Copyprint (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']
Copydf1 = 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:
Copydf2 = 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:
Videos
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).
Pandas
pandas.pydata.org › docs › reference › api › pandas.Index.name.html
pandas.Index.name — pandas 3.0.3 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.MultiIndex.names.html
pandas.MultiIndex.names — pandas 3.0.3 documentation
This attribute provides access to the names of the levels in a MultiIndex. The names are stored as a FrozenList, which is an immutable list-like container. Each name corresponds to a level in the MultiIndex, and can be used to identify or manipulate the levels individually.
Astral
docs.astral.sh › uv › concepts › projects › dependencies
Managing dependencies | uv
April 21, 2026 - For example, if a project uses setuptools as its build backend, it should declare setuptools as a build dependency: ... [project] name = "pandas" version = "0.1.0" [build-system] requires = ["setuptools>=42"] build-backend = "setuptools.build_meta"
Pandas
pandas.pydata.org › pandas-docs › version › 2.1 › reference › api › pandas.Index.set_names.html
pandas.Index.set_names — pandas 2.1.4 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.Series.name.html
pandas.Series.name — pandas 3.0.3 documentation
Corresponding Index property. ... The Series name can be set initially when calling the constructor.
Medium
medium.com › @petehouston › set-index-for-dataframe-in-pandas-55400e306e42
Set index for DataFrame in pandas | by Pete Houston | Medium
March 20, 2019 - >>> df = df.drop(['id'], axis=1) >>> df name job score id 1 'Pete Houston' 'Software Engineer' 92 2 'John Wick' 'Assassin' 95 3 'Bruce Wayne' 'Batman' 99 4 'Clark Kent' 'Superman' 96 · Okay, it looks very fine-tuning for now. It is very common to see data engineers to set index for DataFrame in pandas; so, a function is made to help with this situation, set_index().
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 - MultiIndex / advanced indexing — pandas 2.2.0 documentation · By specifying a list of column labels in the first argument (keys), multiple columns are assigned as a MultiIndex. print(df.set_index(['state', 'name'])) # age point # state name # NY Alice 24 64 # CA Bob 42 92 # Charlie 18 70 # TX Dave 68 70 # CA Ellen 24 88 # NY Frank 30 57
NumPy
numpy.org › doc › stable › user › absolute_beginners.html
NumPy: the absolute basics for beginners — NumPy v2.4 Manual
It’s simple to read in a CSV that contains existing information. The best and easiest way to do this is to use Pandas.
Pandas
pandas.pydata.org › docs › reference › indexing.html
Index objects — pandas 3.0.3 documentation
Many of these methods or variants thereof are available on the objects that contain an index (Series/DataFrame) and those should most likely be used before calling these methods directly · Index([data, dtype, copy, name, tupleize_cols])
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.