Pandas DataFrame インデックスの名前を変更する 質問する

Pandas DataFrame インデックスの名前を変更する 質問する

ヘッダーのない、DateTime インデックス付きの csv ファイルがあります。インデックスと列名を変更したいのですが、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

ベストアンサー1

このメソッドは、インデックスrenameに適用されるインデックスの辞書を受け取ります。インデックス レベルの名前に変更します。

df.index.names = ['Date']

これについて考える良い方法は、列とインデックスが同じタイプのオブジェクト (IndexまたはMultiIndex) であり、転置によって 2 つを交換できるということです。

インデックス名は列と似た意味を持つため、少し混乱するかもしれません。そのため、さらにいくつか例を示します。

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

おすすめ記事