2018/02/01
2020/04/14
pandasのデータフレームの要素を参照する【Python3】
当記事では、pandasのデータフレーム(DataFrame)の要素を参照する方法を紹介いたします(Python3)。こちらの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
列名、行名による要素の参照
pandasでは、変数名の後に[]をつけて列名、行名の順番に指定すれば任意の要素を取り出すことが出来ます。df[“列名”][“行名”]というような感じで記述してください。
3列目(lung_capacityの列)を取り出したい場合。
df["lung_capacity"] 0 4300 1 4500 2 3900 3 3000 4 4800
複数列取り出したい場合は、列名をリストにします。
df[["lung_capacity","weight"]] lung_capacity weight 0 4300 79 1 4500 65 2 3900 53 3 3000 45 4 4800 80
行も指定したい場合。
df["lung_capacity"][3] 3000
複数行の指定。
df["lung_capacity"][1:4] 1 4500 2 3900 3 3000
補足になりますが、『1:4』は、1以上4未満という意味です。
ちなみに、指定した列名、行名ないと次のようなエラーメッセージがでます。
df[3] KeyError: 3
『df[“列名”]』の代わりに『df.列名』でも同様に列を参照することができます。
df.weight 0 79 1 65 2 53 3 45 4 80
スライスによる行の参照
スライスとは、pythonのリストの要素を参照する際に使うテクニックです。
変数名[◯:△:□]
で、リストの◯以上△未満の要素について□個おきに取得すると言う意味です。(◯:開始位置、△:終了位置、□:間隔)
例えば、
list1[2:10:2]
なら、2以上10未満2個おきなので、(2が開始、10が終了、2個間隔)
2番目、4番目、6番目、8番目
の要素が参照されることになります。(python界では0番目から要素を数え始めることには気をつけましょう。)
pandasではこのスライスによってデータフレームを横に切ることができます。3行目以上5行目未満を参照する場合、
df[3:5] number age blood_pressure lung_capacity sex weight disease 3 4 25 112 3000 F 45 0 4 5 27 108 4800 M 80 0
df[“列名”][“行名”]の時と違い、一つ目の[]が行の番号を指定ので混同しないように注意が必要です。
2行目以降全部を参照する場合。
df[2:] number age blood_pressure lung_capacity sex weight disease 2 3 24 104 3900 F 53 0 3 4 25 112 3000 F 45 0 4 5 27 108 4800 M 80 0
1行読み込んだら次の行はスキップする場合。
df[::2] number age blood_pressure lung_capacity sex weight disease 0 1 22 110 4300 M 79 1 2 3 24 104 3900 F 53 0 4 5 27 108 4800 M 80 0
このようにpandasでもスライスが使えます。
.ilocを用いた行・列番号による指定
変数名.iloc[行番号,列番号]とすることで、番号を指定して要素そこにある要素を参照します。
0行目2列目の場合。
df.iloc[0,2] 110
もちろんここでもスライスが利用可。行は1行ごとにスキップ、列は1列目以上3列目未満の場合。
df.iloc[::2,1:3] age blood_pressure 0 22 110 2 24 104 4 27 108
指定した条件にマッチする要素を参照
pandasはデータフレームごと比較演算子を適用して、各要素の真偽判定が可能です。
df == 3 number age blood_pressure lung_capacity sex weight disease 0 False False False False False False False 1 False False False False False False False 2 True False False False False False False 3 False False False False False False False 4 False False False False False False False
これを応用して、例えば真の部分だけを残して、同じ形のデータフレームを作ることができます。
df[df == 3] number age blood_pressure lung_capacity sex weight disease 0 NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN 2 3.0 NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN NaN
『.iloc』や『.列名』も合わせて利用すると、条件に合うデータだけを取り出せます。
23歳より年上の人のデータだけを取り出す場合。
df[df.iloc[:,1] > 23] number age blood_pressure lung_capacity sex weight disease 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.age>23] number age blood_pressure lung_capacity sex weight disease 2 3 24 104 3900 F 53 0 3 4 25 112 3000 F 45 0 4 5 27 108 4800 M 80 0
Recommended