Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重命名多索引列不起作用_Python_Pandas_Dataframe_Rename_Multi Index - Fatal编程技术网

Python 重命名多索引列不起作用

Python 重命名多索引列不起作用,python,pandas,dataframe,rename,multi-index,Python,Pandas,Dataframe,Rename,Multi Index,我正在尝试动态重命名数据框的列。原因是我想做一些像 df.rename(..).plot() 这就是我尝试这样做的方式: import pandas as pd import numpy as np np.random.seed(42) cols = [(100,i) for i in range(1, 6)] cols_replace = ['Sensor ' + str(i) for i in range(1, len(cols)+1)] rename_dict = dict(zip

我正在尝试动态重命名数据框的列。原因是我想做一些像

df.rename(..).plot()
这就是我尝试这样做的方式:

import pandas as pd
import numpy as np

np.random.seed(42)

cols = [(100,i) for i in range(1, 6)]
cols_replace = ['Sensor ' + str(i) for i in range(1, len(cols)+1)]

rename_dict = dict(zip(df.columns, cols_replace))

df = pd.DataFrame(np.random.rand(5, len(cols)), columns=pd.MultiIndex.from_tuples(cols))

print(df.rename(columns=rename_dict))
但是,由于某些原因,这不起作用,因为生成的数据框仍然没有显示我正在查找的列名:

        100                                        
          1         2         3         4         5
0  0.374540  0.950714  0.731994  0.598658  0.156019
1  0.155995  0.058084  0.866176  0.601115  0.708073
2  0.020584  0.969910  0.832443  0.212339  0.181825
3  0.183405  0.304242  0.524756  0.431945  0.291229
4  0.611853  0.139494  0.292145  0.366362  0.456070
为什么这不能像我期望的那样工作?我有没有办法做到这一点


rename\u dict
的内容是:

{(100, 1): 'Sensor 1', 
 (100, 2): 'Sensor 2', 
 (100, 3): 'Sensor 3', 
 (100, 4): 'Sensor 4', 
 (100, 5): 'Sensor 5'}

尝试将
重命名
级别
参数一起使用-

df = df.rename(columns='Sensor {}'.format , level=1)  
感谢Zero在速记方面的改进。或者

i = df.columns.levels[1]   # OP's suggestion, for more flexibility!
j = ['Sensor ' + str(x) for x in range(1, len(cols) + 1)]
rename_dict = dict(zip(i, j))

df = df.rename(columns=rename_dict, level=1)


由于您希望在第一个级别(而不是第零个级别)上应用重命名操作,如果将=
i=range(1,6)
更改为
i=df.columns.levels[1]
则传递
level=1

,这更灵活,更符合我的要求。我认为我可以提供元组形式的键,只要它们包含在索引中——显然不是这样。谢谢,一如既往:)原因是ofc的值不一定只是
范围(..)
,而是可以是任意的。@displayname不用担心。另外,很好的调整,谢谢。用
df.rename(columns='Sensor{}.format,level=1)速记

df
        100                                        
   Sensor 1  Sensor 2  Sensor 3  Sensor 4  Sensor 5
0  0.374540  0.950714  0.731994  0.598658  0.156019
1  0.155995  0.058084  0.866176  0.601115  0.708073
2  0.020584  0.969910  0.832443  0.212339  0.181825
3  0.183405  0.304242  0.524756  0.431945  0.291229
4  0.611853  0.139494  0.292145  0.366362  0.456070