【python】pandas DataFrameの列名をread_csvで変更する

Pandas

pandasでDataFrameの列名を変更するときにはrename()メソッドを使うのが一般的?
もしくはdf.columns = [“A”, “B”, “C”]みたいに直接書くこともできる

pandasを使うにおそらく最初に出会うであろうread_csv

使い方を見ていた思ったこと、まずは単純なデータ読み込み

import pandas as pd
df = pd.read_csv("sample.csv")
df
indexnumberageheightweightsex
0122190116M
122318659M
232415690F
342517094F
4527182116M

read_csvの引数にnamesを与えてあげると列名を追加することができる。
(元々あった列名は0行目として読み込まれる)

df = pd.read_csv("sample.csv", names=("番号", "年齢", "身長", "体重", "性別"))
df.head()
番号年齢身長体重性別
0numberageheightweightsex
1122190116M
222318659M
332415690F
442517094F

このデータにはheader情報があるが、headerがないデータを読み込むときにはheader=Noneを指定する

df = pd.read_csv("sample.csv", header=None)
df
01234
0numberageheightweightsex
1122190116M
222318659M
332415690F
442517094F

ここで疑問、これ組み合わせたら列名変更できるのでは?

やってみる

df = pd.read_csv("sample.csv", header=None, \
                 names=("番号", "年齢", "身長", "体重", "性別"),\
                 skiprows=1)
df
番号年齢身長体重性別
0numberageheightweightsex
1122190116M
222318659M
332415690F
442517094F

単純にheader=Noneの時の初期値列番号[0, 1, 2, 3, 4]に名前が振られただけ

指定した行数を飛ばして読み込むことができる引数skiprows

df = pd.read_csv("sample.csv", skiprows=1)
df
122190116M
022318659M
132415690F
242517094F
3527182116M

これを組み合わせてみる

df = pd.read_csv("sample.csv", \
                 names=("番号", "年齢", "身長", "体重", "性別"), \
                 skiprows=1)
df
番号年齢身長体重性別
0122190116M
122318659M
232415690F
342517094F
4527182116M

できた!

renameを使う場合も書いておく

df = pd.read_csv("sample.csv")
df = df.rename(columns={"number":"番号", \
                        "height":"身長", \
                        "weight":"体重", \
                        "sex":"性別"})
df
番号年齢身長体重性別
0122190116M
122318659M
232415690F
342517094F
4527182116M

renameだと元の列名も書かないと行けなくてめんどくさいなーっと思ってこの方法に行きついたのですが、renameだと元の列名を指定して新しく列名をつけられるので、一部だけ変えたいときにはこちらのほうが有能だし、コードを見てどの列名がどの列名に変換されているのかわかりやすいので結局はrenameを使用したほうがいいと思いました。

コメント

タイトルとURLをコピーしました