行を選ぶ
このレッスンでできるようになること。loc と iloc を使い分けて、狙った行を取り出せるようになります。
列は角かっこで選べましたが、行を選ぶには別の道具が要ります。pandas には2つあり、名前が似ているので最初に違いを固めておきます。
iloc は位置で選びます。i は integer の i です。df.iloc[0] は何行目かを問わず先頭の行、df.iloc[2:5] は3番目から5番目までの行です。Python のリストと同じ数え方で、終わりの位置は含みません。
loc はラベルで選びます。読み込んだ直後のインデックスは 0, 1, 2 という数字のラベルなので df.loc[0] は「ラベル 0 の行」です。ここが紛らわしいところで、df.loc[2:5] は5を含みます。位置ではなくラベルの範囲を指定しているからです。
Python
import pandas as pd
df = pd.read_csv("sales.csv")
first_three = df.iloc[0:3]
by_label = df.loc[2:4, ["店舗", "金額"]]loc は行と列を同時に指定できます。カンマの前が行、後ろが列です。「特定の期間の、店舗と金額だけ」のような取り出し方が1行で書けます。iloc でも df.iloc[0:3, 1:3] のように書けますが、列を位置の数字で指定することになるので読みにくく、実務では loc のほうがよく使われます。
行を1つだけ取り出すと Series が返ります。df.iloc[0] の中身は、列名がインデックスになった縦のデータです。df.iloc[0]["金額"] のように、そこからさらに値を取れます。
使い分けの目安は次のとおりです。並び順で「先頭の何件」を見たいときは iloc、行の名前や条件で選びたいときは loc です。次のレッスンで学ぶ条件抽出は loc の仲間なので、ここで loc に慣れておくと楽になります。
要件
- iloc で先頭3行を取り、金額の合計を head_total に int で入れる
- loc でラベル1から3までを取り、金額の合計を label_total に int で入れる
- iloc で先頭行を取り、その店舗名を first_store に入れる