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')
我想将"f"
重命名为"e"
。根据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. |(默认,2016年6月29日,11:07:13)[MSC v.1500 64位(AMD64)]
和pandas 0.19.1
df.rename(columns={('d', 'f'): ('e', 'g')})
,尽管它看起来是正确的。换句话说:.rename()
不会像人们期望的那样工作,因为即使每列的键都是一个元组,但 pandas 中的实现是由两个列表df.keys().levels
和df.keys().labels
组成的。如果你不想改变该名称的所有出现次数,更改一列的键可能需要将元素附加到levels
。 - Lukas