2018/02/01
2020/04/14
pandas データフレームの行名・列名の参照と変更と追加
当記事では、pandasのデータフレーム(DataFrame)の行名・列名の参照や変更。また、列名を利用した新しい列の追加の方法を紹介しています。こちらのcsvファイル→サンプルcsvファイルを説明用に使うので、同じことがしたい方はダウンロードして使ってください!
まずはデータを読み込みます。
import pandas as pd #pandasをpdとしてインポート #データをdfに読み込み。 df = pd.read_csv("sample.csv") #dfの中身を確認 print(df)
今回使うデータは以下のような形になっています。
number age blood_pressure lung_capacity sex weight disease 0 1 22 110 4300 M 79 1 1 2 23 128 4500 M 65 1 2 3 24 104 3900 F 53 0 3 4 25 112 3000 F 45 0 4 5 27 108 4800 M 80 0
行名、列名を参照する方法
.indexで行名、.clumnsで列名を参照できます。
df.index #行名 RangeIndex(start=0, stop=5, step=1)
df.columns #列名 Index(['number', 'age', 'blood_pressure', 'lung_capacity', 'sex', 'weight', 'disease'], dtype='object')
行名、列名はリストなので、スライスで取り出したい部分だけ取り出すことも可能です。
df.columns[1:4:2] Index(['age', 'lung_capacity'], dtype='object')
行名、列名の変更
代入で変更する
行名、列名を変更するには、変更先の名前をリストにして代入します。
df.columns = ['番号','年齢','血圧','肺活量','性別','病気','体重'] print(df) 番号 年齢 血圧 肺活量 性別 病気 体重 0 1 22 110 4300 M 79 1 1 2 23 128 4500 M 10 1 2 3 24 104 3900 F 53 0 3 4 25 112 3000 F 45 0 4 5 27 108 4800 M 80 0
df.index = ["Jack","Tom","Lisa","Michel","Jacson"] print(df) 番号 年齢 血圧 肺活量 性別 病気 体重 Jack 1 22 110 4300 M 79 1 Tom 2 23 128 4500 M 10 1 Lisa 3 24 104 3900 F 53 0 Michel 4 25 112 3000 F 45 0 Jacson 5 27 108 4800 M 80 0
ちなみに、この方法の場合、丸ごと変更する必要があります。部分的に変更しようとすると、
df.index[1] = 2 *** TypeError: Index does not support mutable operations
と、エラーに弾かれます。
.rename()を用いて変更する
.rename()を使えばピンポイントで変更したい箇所を指定して変更できます。
df.rename(columns={"age":"年齢"}) number 年齢 blood_pressure lung_capacity sex weight disease 0 1 22 110 4300 M 79 1 1 2 23 128 4500 M 65 1 2 3 24 104 3900 F 53 0 3 4 25 112 3000 F 45 0 4 5 27 108 4800 M 80 0
行と列を同時。カンマで区切ることで複数変更も可能です。
df.rename(columns={"age":"年齢","number":"番号"},index={0:"Jack"}) 番号 年齢 blood_pressure lung_capacity sex weight disease Jack 1 22 110 4300 M 79 1 1 2 23 128 4500 M 65 1 2 3 24 104 3900 F 53 0 3 4 25 112 3000 F 45 0 4 5 27 108 4800 M 80 0
この方法の場合、以下のように変更後のものを代入しないと元の状態のままです。
df = df.rename(columns={"age":"年齢","number":"番号"},index={0:"Jack"})
新しい列を作る
データフレームに無い列名を指定して、要素を代入すると新しい列が最後尾に追加されます。
df["身長"] = [173,145,167,155,132] print(df) 番号 年齢 血圧 肺活量 性別 病気 体重 身長 Jack 1 22 110 4300 M 79 1 173 Tom 2 23 128 4500 M 10 1 145 Lisa 3 24 104 3900 F 53 0 167 Michel 4 25 112 3000 F 45 0 155 Jacson 5 27 108 4800 M 80 0 132
リストの長さは行数と一致することが求められます。してないと、、、
df["身"] = [173,145,167,155] *** ValueError: Length of values does not match length of index
と表示されます。
(totalcount 96,046 回, dailycount 143回 , overallcount 16,640,689 回)
Recommended