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 0df[“列名”][“行名”]の時と違い、一つ目の[]が行の番号を指定ので混同しないように注意が必要です。
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 01行読み込んだら次の行はスキップする場合。
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 0df[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カテゴリ: Python

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

AVILEN編集部
株式会社AVILEN

