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 0df.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と表示されます。
カテゴリ: Python

関連するサービス
記事の筆者

AVILEN編集部
株式会社AVILEN

