我有一个没有头的csv文件,有一个DateTime索引。我想重命名索引和列名,但使用df.rename()只重命名列名。错误吗?我的版本是0.12.0

In [2]: df = pd.read_csv(r'D:\Data\DataTimeSeries_csv//seriesSM.csv', header=None, parse_dates=[[0]], index_col=[0] )

In [3]: df.head()
Out[3]: 
                   1
0                   
2002-06-18  0.112000
2002-06-22  0.190333
2002-06-26  0.134000
2002-06-30  0.093000
2002-07-04  0.098667

In [4]: df.rename(index={0:'Date'}, columns={1:'SM'}, inplace=True)

In [5]: df.head()
Out[5]: 
                  SM
0                   
2002-06-18  0.112000
2002-06-22  0.190333
2002-06-26  0.134000
2002-06-30  0.093000
2002-07-04  0.098667

当前回答

df.index.rename('new name', inplace=True)

是唯一一个为我做的工作(熊猫0.22.0)。 如果没有inplace=True,在我的例子中就没有设置索引的名称。

其他回答

df.index.rename('new name', inplace=True)

是唯一一个为我做的工作(熊猫0.22.0)。 如果没有inplace=True,在我的例子中就没有设置索引的名称。

rename方法接受索引的字典,该字典应用于索引值。 重命名为索引级别的名称:

df.index.names = ['Date']

考虑这个问题的一个好方法是列和索引是同一类型的对象(index或MultiIndex),您可以通过转置来交换两者。

这有点令人困惑,因为索引名与列的含义相似,所以这里有更多的例子:

In [1]: df = pd.DataFrame([[1, 2, 3], [4, 5 ,6]], columns=list('ABC'))

In [2]: df
Out[2]: 
   A  B  C
0  1  2  3
1  4  5  6

In [3]: df1 = df.set_index('A')

In [4]: df1
Out[4]: 
   B  C
A      
1  2  3
4  5  6

你可以在索引上看到重命名,它可以改变值1:

In [5]: df1.rename(index={1: 'a'})
Out[5]: 
   B  C
A      
a  2  3
4  5  6

In [6]: df1.rename(columns={'B': 'BB'})
Out[6]: 
   BB  C
A       
1   2  3
4   5  6

同时重命名关卡名称:

In [7]: df1.index.names = ['index']
        df1.columns.names = ['column']

注意:此属性只是一个列表,您可以将其重命名为列表理解/映射。

In [8]: df1
Out[8]: 
column  B  C
index       
1       2  3
4       5  6

单一指数:

 df.index.rename('new_name')

多重指数:

 df.index.rename(['new_name','new_name2'])

我们也可以在最新的熊猫中使用这个:

rename_axis

在Pandas 0.13及更高版本中,索引级别名称是不可变的(类型FrozenList),不能再直接设置。您必须首先使用index .rename()将新的索引级别名称应用到索引,然后使用DataFrame.reindex()将新索引应用到DataFrame。例子:

对于熊猫版本< 0.13

df.index.names = ['Date']

对于熊猫版本>= 0.13

df = df.reindex(df.index.rename(['Date']))

你也可以使用Index。Set_names如下:

In [25]: x = pd.DataFrame({'year':[1,1,1,1,2,2,2,2],
   ....:                   'country':['A','A','B','B','A','A','B','B'],
   ....:                   'prod':[1,2,1,2,1,2,1,2],
   ....:                   'val':[10,20,15,25,20,30,25,35]})

In [26]: x = x.set_index(['year','country','prod']).squeeze()

In [27]: x
Out[27]: 
year  country  prod
1     A        1       10
               2       20
      B        1       15
               2       25
2     A        1       20
               2       30
      B        1       25
               2       35
Name: val, dtype: int64
In [28]: x.index = x.index.set_names('foo', level=1)

In [29]: x
Out[29]: 
year  foo  prod
1     A    1       10
           2       20
      B    1       15
           2       25
2     A    1       20
           2       30
      B    1       25
           2       35
Name: val, dtype: int64