・お題: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')
が返ってくる。
終わり