Python環境を起動中... 初回のみ数秒かかります
Lesson 5 / 12

列と行の選択

このレッスンで学ぶこと

  • [] で列を選択できる(1列・複数列)
  • loc(ラベル指定)で行・列を選択できる
  • iloc(位置指定)で行・列を選択できる
  • loc と iloc の違い(スライスの挙動)を理解できる

1. データの「一部だけ」を取り出す

分析では「全データ」ではなく「特定の列だけ」「特定の患者だけ」を取り出したい場面が頻繁にあります。 pandasには、目的に応じた3つの選択方法があります。

書き方用途
df["列名"] / df[["列A","列B"]]を選ぶ
df.loc[行ラベル, 列ラベル]ラベル(名前)で行・列を選ぶ
df.iloc[行番号, 列番号]位置(番号)で行・列を選ぶ

まず [] による列選択から見ていき、次に行も選べる loc / iloc へ進みます。 特に loc と iloc の違いはpandasで最も混乱しやすいポイントなので、具体例でしっかり押さえましょう。

2. 列を選ぶ([])

列を選ぶには df["列名"] と書きます。1列なら Seriesdf[["列A", "列B"]] のように リストで複数列を指定すると、その列だけの DataFrame が返ります。

sample_1.py
Ctrl+Enter
出力

⚠ 1列と複数列でカッコの数が違う: 1列は df["年齢"](カッコ1つ)、複数列は df[["患者ID","SBP"]](カッコ2つ)です。 外側の [] は「選択」、内側の [] は「列名のリスト」を意味します。 複数列なのにカッコを1つにすると KeyError になるので注意しましょう。

3. loc — ラベルで行・列を選ぶ

df.loc[行ラベル, 列ラベル] は、名前(ラベル)を使って行と列を同時に選べます。 「行はindexのラベル、列は列名」で指定します。行だけ・列だけの指定もできます。

sample_2.py
Ctrl+Enter
出力

🩺 医療データ文脈: もしindexを患者IDにしておけば、df.loc["P003", "SBP"] のように 「P003さんのSBP」と人間が読める形で値を取り出せます。 ラベルでアクセスできる loc は、医療データのように「行が特定の対象(患者)を表す」場面で特に便利です。

4. iloc — 位置で行・列を選ぶ/locとの違い

df.iloc[行番号, 列番号] は、位置(0から数える番号)で行と列を選びます。 「上から何番目・左から何番目」という指定です。ラベルが何であっても、番号で機械的にアクセスできます。

sample_3.py
Ctrl+Enter
出力

⚠ 最重要:loc と iloc のスライスの違い

同じ「0から2まで」でも、loc と iloc で取れる行数が違います。ここがpandas最大の混乱ポイントです。

  • df.loc[0:2]ラベル0〜2を含む → 0, 1, 2 の 3行
  • df.iloc[0:2]位置2は含まない → 0, 1 の 2行

覚え方:loc(ラベル)は「終わりを含む」、iloc(位置)はPythonのスライスと同じで「終わりを含まない」。 iloc は range() やリストのスライスと同じ感覚、と覚えると混乱しません。

💡 loc と iloc の使い分け:

  • 名前(ラベル)で選びたいloc(「P003さんの」「SBP列の」)
  • 位置(番号)で選びたいiloc(「先頭5行」「左から2列目」)

迷ったら「名前で指定する=loc、番号で指定する=iloc」と覚えればOKです。

5. 練習問題

問題 1

複数列を選択しよう

下記の df から、「患者ID」と「BMI」の2列だけを取り出して表示してください。

exercise_1.py
出力
ヒントを見る(答え+解説)
import pandas as pd

df = pd.DataFrame({
    "患者ID": ["P001","P002","P003"],
    "年齢":   [45, 62, 33],
    "SBP":    [120, 145, 118],
    "BMI":    [22.5, 28.1, 24.0],
})

# 「患者ID」と「BMI」の2列を取り出して表示してください
print(df[["患者ID", "BMI"]])

複数列は 列名のリスト[[ ]] で渡します。カッコが2つになる点に注意。結果はその2列だけのDataFrameになります。

問題 2

loc で特定の値を取り出そう

下記の df から、loc を使って 行ラベル2・列「SBP」の値を取り出して表示してください。

exercise_2.py
出力
ヒントを見る(答え+解説)
import pandas as pd

df = pd.DataFrame({
    "患者ID": ["P001","P002","P003","P004"],
    "SBP":    [120, 145, 118, 138],
})

# loc を使って 行ラベル2・列「SBP」の値を表示してください
print(df.loc[2, "SBP"])   # 118

df.loc[行ラベル, 列ラベル] で、特定の1つの値を取り出せます。行ラベル2(=3人目・P003)のSBPは 118 です。

問題 3

iloc で先頭2行を取り出そう

下記の df から、iloc を使って 先頭2行を取り出して表示してください。 (ヒント:ilocのスライスは「終わりを含まない」)

exercise_3.py
出力
ヒントを見る(答え+解説)
import pandas as pd

df = pd.DataFrame({
    "患者ID": ["P001","P002","P003","P004","P005"],
    "SBP":    [120, 145, 118, 138, 160],
})

# iloc を使って先頭2行を取り出して表示してください
print(df.iloc[0:2])   # 位置0,1 の2行(2は含まない)

df.iloc[0:2] は位置0と1の2行を返します(2は含まない=Pythonのスライスと同じ)。df.head(2) でも同じ結果が得られます。locだと df.loc[0:1] で同じ2行になる点と比べると、違いがよく分かります。

6. まとめ

このレッスンのポイント

  • df["列"]=1列(Series)/df[["列A","列B"]]=複数列(DataFrame・カッコ2つ)
  • loc[行ラベル, 列ラベル]名前(ラベル)で選ぶ
  • iloc[行番号, 列番号]位置(番号)で選ぶ
  • スライスの違い:loc は終わりを含む(0:2→3行)/ iloc は含まない(0:2→2行)
  • 名前で選ぶ=loc、番号で選ぶ=iloc

自由に試してみましょう:

free_practice.py
出力

完了するとコース一覧に進捗が記録されます