df = pd.DataFrame([[1,2,3], [10,20,30], [100,200,300]]) df.columns = pd.MultiIndex.from_tuples((("a", "b"), ("a", "c"), ("d", "f"))) df
returns
a d b c f 0 1 2 3 1 10 20 30 2 100 200 300
and
df.columns.levels[1]
returns
Index([u'b', u'c', u'f'], dtype='object')
I want to rename "f"
to "e"
. According to pandas.MultiIndex.rename
I run:
df.columns.rename(["b1", "c1", "f1"], level=1)
But it raises
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-110-b171a2b5706c> in <module>() ----> 1 df.columns.rename(["b1", "c1", "f1"], level=1) C:\Users\USERNAME\AppData\Local\Continuum\Miniconda2\lib\site-packages\pandas\indexes\base.pyc in set_names(self, names, level, inplace) 994 if level is not None and not is_list_like(level) and is_list_like( 995 names): --> 996 raise TypeError("Names must be a string") 997 998 if not is_list_like(names) and level is None and self.nlevels > 1: TypeError: Names must be a string
I use Python 2.7.12 |Continuum Analytics, Inc.| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)]'
and pandas 0.19.1
pandas MultiIndex to ColumnsUse pandas DataFrame. reset_index() function to convert/transfer MultiIndex (multi-level index) indexes to columns. The default setting for the parameter is drop=False which will keep the index values as columns and set the new index to DataFrame starting from zero.
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.
Use set_levels
:
In [22]: df.columns.set_levels(['b1','c1','f1'],level=1,inplace=True) df Out[22]: a d b1 c1 f1 0 1 2 3 1 10 20 30 2 100 200 300
rename
sets the name for the index, it doesn't rename the column names:
In [26]: df.columns = df.columns.rename("b1", level=1) df Out[26]: a d b1 b c f 0 1 2 3 1 10 20 30 2 100 200 300
This is why you get the error
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