【リファレンス】インデックス名を変更【python】

DataFrame.rename(index={'旧インデックス名': '新インデックス名'})

DataFrame.rename()の引数をindexにしてやります。

 

変更したいカラムが1つの場合

DataFrame.rename(index={'2000年': '1000年'})

 

変更したいカラムが2つの場合

DataFrame.rename(index={'2000年': '1000年','2004年': '3000年'})

サンプルコードで解説

サンプルデータ作成

in

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
                              'B': [130 , 110 , 120 , 140 , 150]},
                              index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

print(df)

out

             A    B
2000年  a  130
2001年  b  110
2002年  b  120
2003年  b  140
2004年  a  150

変更したいインデックスが1つの場合

インデックス「2000年」を「1000年」に変更をして、printでデータフレームを表示してみましょう。

in

df=df.rename(index={'2000年': '1000年'})

print(df)

インデックス「2000年」を「1000年」に変更されています。

out[2]

            a   B
1000年 a 130
2001年 b 110
2002年 b 120
2003年 b 140
2004年 a 150

変更したいインデックスが2つの場合

インデックス「2000年」を「1000年」に、「2004年」を「3000年」に同時に変更してみましょう。

in[2]

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
          'B': [130 , 110 , 120 , 140 , 150]},
          index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

df=df.rename(index={'2000年': '1000年','2004年': '3000年'})
print(df)

両方のインデックスが変更されています。

out

            A     B
1000年  a  130
2001年  b  110
2002年  b  120
2003年  b  140
3000年  a  150

全引数のソースコード

DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)

 

・mapper, index, columns:[任意]

説明:インデックス名を変更するか、カラム名を変更するか指定。mapperはほぼ使わない。

引数に渡す値:辞書型

デフォルト:(挙動を確認したところ)indexになっている?補足で説明。

 

・axis:[任意]

説明:行で並び替えをするか、列で並び替えをするか。

引数に渡す値: (‘index’, ‘columns’) or number (0, 1)

デフォルト:index

 

・copy:[任意]

説明:行で並び替えをするか、列で並び替えをするか。

引数に渡す値:「0 か ‘index’」,「1 or ‘columns’」

デフォルト:「0」

 

・inplace:[任意]

説明:元のデータフレームを置き換えるかどうか。Trueが変更する、Falseは変更しない

引数に渡す値:True , False

デフォルト:False

 

・level[任意]

説明:カラムが2つ以上の場合に使う

引数に渡す値:(1)階層をint型で指定をすると、(2)カラム名やインデックス名を指定する

デフォルト:なし

引数の補足

mapperについて

mapperを使う場合は、axisでインデックスか、カラムか指定する必要があるっぽい。

axisでインデックスを指定をして、mapperに変更したいインデックスの名前を渡す。

in[4]

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
          'B': [130 , 110 , 120 , 140 , 150]},
          index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

df=df.rename(mapper={'2000年': '1999年'},axis='index')

print(df)

「2000年」というインデックス名が「1999年」に変更されている。

out

             A   B
1999年  a  130
2001年  b  110
2002年  b  120
2003年  b  140
2004年  a  150

 

axisでカラムを指定すると何も変更されない(そんなカラム名がないので)。

in[4]

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
          'B': [130 , 110 , 120 , 140 , 150]},
          index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

df=df.rename(mapper={'2000年': '1999年'},axis='colmuns')

print(df)

out

             A    B
2000年  a  130
2001年  b  110
2002年  b  120
2003年  b  140
2004年  a  150

 

axisでカラムにして、mapperで存在するカラム名を指定すると変更される。

in

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
          'B': [130 , 110 , 120 , 140 , 150]},
          index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

df=df.rename(mapper={'A': 'a'},axis='colmuns')

print(df)

カラム名「A」のみ「a」に変更された。

out

    a  B
2000年  a  130
2001年  b  110
2002年  b  120
2003年  b  140
2004年  a  150

copyについて

copyをFalseにすると、もとのデータフレームも変更される。

in[5]

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
          'B': [130 , 110 , 120 , 140 , 150]},
          index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

df_after=df.rename(mapper={'A': 'a'},axis='columns',copy=False)

 

#行が「2001年」、カラムが「B」の値を200に変更する

df_after.loc['2001年','B']=200

 

print(df)

print(df_after)

dfのデータフレームにつき、値を変更していないのに「200」に変更されている。

out[5]

#dfのデータフレーム

     A   B
2000年  a  130
2001年  b  200
2002年  b  120
2003年  b  140
2004年  a  150


df_afterのデータフレーム

     a   B
2000年  a  130
2001年  b  200
2002年  b  120
2003年  b  140
2004年  a  150

inplaceについて

変数に代入をしなくても、元のデータフレームが置き換わっている。

in

import pandas as pd

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
          'B': [130 , 110 , 120 , 140 , 150]},
          index= ['2000年', '2001年', '2002年', '2003年', '2004年'])

df.rename(columns={'A': 'a'},inplace=True)

print(df)

dfの変数に新たに代入をしなくてもカラム名が変更されている。

out

             a    B
2000年  a  130
2001年  b  110
2002年  b  120
2003年  b  140
2004年  a  150

levelについて

インデックスが2つ以上のデータフレームを作ります。

in

df = pd.DataFrame({'A': ['a', 'b', 'b', 'b', 'a'],
          'B': [130 , 110 , 120 , 140 , 150],
          'C': ['2000年', '2000年', '2001年', '2001年', '2001年']})

df = df.set_index(['C','B'])

print(df)

マルチインデックスのデータフレームができた。

out

                   B
     C     A
2000年  a  130
     b  110
2001年  b  120
             b  140
             a  150

一番左のインデックスを変更したい場合は、levelを「0」に指定する

in

df = df.rename(index={'2000年':'1999年'},level=0)

print(df)

一番左のインデックス「C」の「2000年」が「1999年」に変更された

out

      B
  C  A
1999年  a  130
             b  110
2001年  b  120
     b  140
     a  150

 

左から2番めのインデックスを変更したい場合は、levelを「1」に指定する

in

df = df.rename(index={'2000年':'1999年'},level=1)

print(df)

インデックス「A」の「a」が「x」に変更された

out

      B
  C  A
1999年  x  130
             b  110
2001年  b  120
     b  140
     x  150