2016-12-19 15 views
5
में नाम बदलें MultiIndex कॉलम
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 

रिटर्नपांडा

 a   d 
    b c f 
0 1 2 3 
1 10 20 30 
2 100 200 300 

और

df.columns.levels[1] 

रिटर्न

Index([u'b', u'c', u'f'], dtype='object') 

मैं "e" को "f" नाम बदलना चाहते हैं। pandas.MultiIndex.rename के अनुसार मैं चलाएँ:

df.columns.rename(["b1", "c1", "f1"], level=1) 

लेकिन यह

--------------------------------------------------------------------------- 
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 

मैं Python 2.7.12 |Continuum Analytics, Inc.| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)]' का उपयोग करें और pandas 0.19.1 को जन्म देती है

उत्तर

6

उपयोग 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 सूचकांक के लिए नाम सेट करता है, यह नहीं है' टी स्तंभ नाम का नाम बदलें:

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 

यह वह जगह है तुम क्यों त्रुटि मिलती है

0

पांडा में 0.21.0+ उपयोग पैरामीटर level=1:

d = dict(zip(df.columns.levels[1], ["b1", "c1", "f1"])) 
print (d) 
{'c': 'c1', 'b': 'b1', 'f': 'f1'} 

df = df.rename(columns=d, level=1) 
print (df) 
    a   d 
    b1 c1 f1 
0 1 2 3 
1 10 20 30 
2 100 200 300