pandasでDataFrameの列名を変更するときにはrename()メソッドを使うのが一般的?
もしくはdf.columns = [“A”, “B”, “C”]みたいに直接書くこともできる
pandasを使うにおそらく最初に出会うであろうread_csv
使い方を見ていた思ったこと、まずは単純なデータ読み込み
import pandas as pd
df = pd.read_csv("sample.csv")
df
index | number | age | height | weight | sex |
---|---|---|---|---|---|
0 | 1 | 22 | 190 | 116 | M |
1 | 2 | 23 | 186 | 59 | M |
2 | 3 | 24 | 156 | 90 | F |
3 | 4 | 25 | 170 | 94 | F |
4 | 5 | 27 | 182 | 116 | M |
read_csv
の引数にnames
を与えてあげると列名を追加することができる。
(元々あった列名は0行目として読み込まれる)
df = pd.read_csv("sample.csv", names=("番号", "年齢", "身長", "体重", "性別"))
df.head()
番号 | 年齢 | 身長 | 体重 | 性別 | |
---|---|---|---|---|---|
0 | number | age | height | weight | sex |
1 | 1 | 22 | 190 | 116 | M |
2 | 2 | 23 | 186 | 59 | M |
3 | 3 | 24 | 156 | 90 | F |
4 | 4 | 25 | 170 | 94 | F |
このデータにはheader
情報があるが、header
がないデータを読み込むときにはheader=None
を指定する
df = pd.read_csv("sample.csv", header=None)
df
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | number | age | height | weight | sex |
1 | 1 | 22 | 190 | 116 | M |
2 | 2 | 23 | 186 | 59 | M |
3 | 3 | 24 | 156 | 90 | F |
4 | 4 | 25 | 170 | 94 | F |
ここで疑問、これ組み合わせたら列名変更できるのでは?
やってみる
df = pd.read_csv("sample.csv", header=None, \
names=("番号", "年齢", "身長", "体重", "性別"),\
skiprows=1)
df
番号 | 年齢 | 身長 | 体重 | 性別 | |
---|---|---|---|---|---|
0 | number | age | height | weight | sex |
1 | 1 | 22 | 190 | 116 | M |
2 | 2 | 23 | 186 | 59 | M |
3 | 3 | 24 | 156 | 90 | F |
4 | 4 | 25 | 170 | 94 | F |
単純にheader=Noneの時の初期値列番号[0, 1, 2, 3, 4]に名前が振られただけ
指定した行数を飛ばして読み込むことができる引数skiprows
df = pd.read_csv("sample.csv", skiprows=1)
df
1 | 22 | 190 | 116 | M | |
---|---|---|---|---|---|
0 | 2 | 23 | 186 | 59 | M |
1 | 3 | 24 | 156 | 90 | F |
2 | 4 | 25 | 170 | 94 | F |
3 | 5 | 27 | 182 | 116 | M |
これを組み合わせてみる
df = pd.read_csv("sample.csv", \
names=("番号", "年齢", "身長", "体重", "性別"), \
skiprows=1)
df
番号 | 年齢 | 身長 | 体重 | 性別 | |
---|---|---|---|---|---|
0 | 1 | 22 | 190 | 116 | M |
1 | 2 | 23 | 186 | 59 | M |
2 | 3 | 24 | 156 | 90 | F |
3 | 4 | 25 | 170 | 94 | F |
4 | 5 | 27 | 182 | 116 | M |
できた!
renameを使う場合も書いておく
df = pd.read_csv("sample.csv")
df = df.rename(columns={"number":"番号", \
"height":"身長", \
"weight":"体重", \
"sex":"性別"})
df
番号 | 年齢 | 身長 | 体重 | 性別 | |
---|---|---|---|---|---|
0 | 1 | 22 | 190 | 116 | M |
1 | 2 | 23 | 186 | 59 | M |
2 | 3 | 24 | 156 | 90 | F |
3 | 4 | 25 | 170 | 94 | F |
4 | 5 | 27 | 182 | 116 | M |
renameだと元の列名も書かないと行けなくてめんどくさいなーっと思ってこの方法に行きついたのですが、renameだと元の列名を指定して新しく列名をつけられるので、一部だけ変えたいときにはこちらのほうが有能だし、コードを見てどの列名がどの列名に変換されているのかわかりやすいので結局はrenameを使用したほうがいいと思いました。
コメント