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
#For MultiIndex in index and columns is necessary working with .names instead .name and
#set by list or tuples: 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']
df.rename_axis(('foo','bar'))
df.rename_axis(('baz','bak'), axis=1) #columns
df.rename_axis(index=('foo','bar'), columns=('baz','bak'))
#Removing index and columns names means set it to None:
df2 = df.rename_axis(index=(None,None), columns=(None,None))
#OR
df.index.names = ['foo','bar']
df.columns.names = ['baz','bak']
dir(df.index)
df.index.rename('foo', inplace=True)