行を選ぶ
このレッスンでできるようになること。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 に入れる
入出力例
pick_rows("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,4500
2026-01-08,渋谷店,木製カッティングボード,調理器具,1,4200
2026-01-09,横浜店,白磁のマグカップ,食器,4,7200
2026-02-03,渋谷店,鋳物ホーロー鍋,調理器具,1,16800
2026-02-04,大宮店,白磁のマグカップ,食器,5,9000
2026-02-05,渋谷店,布製収納バスケット,収納,2,3000
") → {"first_store":"渋谷店","head_total":15900,"label_total":16500}
pick_rows("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,4500
2026-01-08,渋谷店,木製カッティングボード,調理器具,1,4200
") → {"first_store":"渋谷店","head_total":15900,"label_total":16500}ヒント
編集 ゆめさく編集部