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

こつこつPython

この記事の執筆・監修

キノコード
キノコード

テクノロジーアンドデザインカンパニー合同会社のCEO。
日本最大級のプログラミング教育のYouTubeチャンネル「キノコード」や、プログラミング学習サービス「キノクエスト」を運営。
著書「あなたの仕事が一瞬で片付く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
未経験からはじめるPython学習「キノクエスト」 キノクエスト
  • スキルアップしたいけど何からはじめればよいかわからない…
  • プログラミングスクールに入りたいけど料金が高い…
  • プログラミングを学んでも業務やキャリアに活かせるか不安…

キノクエストは、このような悩みを持つ方にぴったりのプログラミング学習サービスです。
国内最大級のプログラミング学習系YouTubeチャンネル「キノコード」が提供しているから、未経験者にもわかりやすく質の高い学習体験を実感していただけます。

キノクエスト