いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【Python】dataframeの列名やインデックスをまとめて変えたい。

・お題:DataFrameを作成したが、列名やインデックスに問題がある。置換したり、一括で変えたり、接尾辞を加えたり、いろいろとうまいこと変更したい。

 

・とりあえず、dataframeを作成する。

import pandas as pd
dic={"A":[1,2,3],
    "B":[4,5,6],
    "C":[7,8,9]}
df=pd.DataFrame(dic,index=["a","b","c"])

これで、以下のdfができた。列名がA,B,Cで、indexがa,b,cになっている。

 

・indexのbをsecondに、cをthirdに変えたい場合、名称変換の対応を示す辞書を作成し、renameメソッドに渡せば良い(以下)。

new={"b":"second",
     "c":"third"}

df.rename(mapper=new)

・同じように、列名のAをalphaに、Bをbetaに変えたい場合、名称変換の対応を示す辞書を作成し、renameメソッドに渡す。ただし、axis=1を追加し、列名であることを明示する(以下)。

new2={"A":"alpha",
    "B":"beta"}

df.rename(mapper=new2,axis=1)

これで出力は、

・引数mapperで辞書を渡し、引数axisで列名の話かindexの話か渡す訳だけれど、列名とindexを両方変えたい時だってある。そういう場合は引数columnsと引数indexに辞書を渡せば、行列をそれぞれの引数だけで処理できる(最初からこちらだけで良かったかもしれない……)。

 

・列名やindexを、「どれをどれに」ではなく、一括で全部変えたい場合には、set_axisを使う。

df.set_axis(["first","second","third"])

df.set_axis(["alpha","beta","gamma"],axis=1)

変更後の列名またはindexの一覧をリストで渡すことになるが、これが変更前の列数やindex数と違うとエラーが返るっぽい。

 

・列名に何かをくっつけたい場合は、add_prefixまたはadd_suffixをくっつける。

df.add_prefix("column_")

df.add_suffix("_column")

ちなみに、prefixは接頭辞のことで、suffixは接尾辞のことらしい。一つ賢くなった。

・同じ目的の別解として、.formatを使うこともできる。

df.rename("{}_column".format,axis=1)

で同様の結果を得られるし、axis=1を指定しなければindexに接尾辞を付け足すことができる。こっちの方が便利かも。

 

・ちなみに、dataframeから列名やindexを引っ張ってくるには、.columnsや.indexを付ければ良い。

df.index

でIndex(['a', 'b', 'c'], dtype='object')

df.columns

でIndex(['A', 'B', 'C'], dtype='object')

が返ってくる。

 

終わり