【第8回】【初心者向け】Pandasのlocとilocの違いを図解で解説|行・列の抽出方法と使い分けのコツ

Pythonのデータ分析ライブラリ「Pandas」で、データ抽出に使うlociloc
初心者が迷いやすいこの2つの違いと、使い分けのコツをわかりやすくまとめました。

▶️ locやilocの公式ドキュメントも参考にしてください:
pandas DataFrame loc Documentation

pandas DataFrame iloc Documentation

筆者の体験談と失敗からの学び

私自身、初めてlocilocを使ったときに混乱しました。ilocを使って次のように書いたのですが、エラーになってしまいました。

# 間違った使い方(ilocで列名を指定)
df.iloc[:, ['名前', '年収(円)']]

これはilocが「インデックス番号指定」専用であるため、列名を使うとエラーになるのです。

一方で、locでは次のように書くと問題なく動作します。

# 正しい使い方(locで列名を指定)
df.loc[:, ['名前', '年収(円)']]

改善策として:
私は「locはラベル」「ilocはインデックス」と手元にメモを貼って覚えるようにしました。
また、df.columnsdf.indexをこまめに確認することで、ラベルと番号の違いを意識できるようになりました。

最初は誰でも間違えるもの。失敗から学ぶことで、より深く理解できます。

1. locとilocの基本

  • loc:ラベル名(列名や行名)で指定する
  • iloc:インデックス番号(位置)で指定する

2. サンプルデータの作成

import pandas as pd

df = pd.DataFrame({
    "名前": ["太郎", "花子", "次郎", "美香", "健一", "恵子", "翔", "茜", "隆", "葵"],
    "年齢": [23, 29, 35, 42, 18, 33, 27, 24, 31, 30],
    "職業": ["エンジニア", "デザイナー", "教師", "医師", "学生", "看護師", "プログラマー", "販売員", "弁護士", "研究者"],
    "年収(円)": [4500000, 5500000, 4900000, 7300000, 0, 4000000, 6000000, 3200000, 8000000, 5800000],
    "居住地": ["東京", "大阪", "名古屋", "札幌", "福岡", "東京", "神戸", "仙台", "横浜", "千葉"],
    "勤続年数": [2, 4, 10, 15, 1, 5, 3, 1, 12, 8]
})

3. locの使い方

# "名前"列だけ取り出す
df.loc[:, '名前']

# "名前"と"年収(円)"を取り出す
df.loc[:, ['名前', '年収(円)']]

4. ilocの使い方

# 0列目("名前")だけ取り出す
df.iloc[:, 0]

# 0列目と3列目("名前"と"年収(円)")を取り出す
df.iloc[:, [0, 3]]

5. locとilocの使い分けフローチャート

【フローチャート】
「列名・行名を知っている」→ locを使う
「インデックス番号で指定したい」→ ilocを使う

6. まとめ

  • 列や行の名前で選ぶなら loc
  • 列や行の番号で選ぶなら iloc

7. locとilocの実践例

7.1 locを使った条件抽出

# 年収500万円以上の名前と年収を抽出
high_income = df.loc[df['年収(円)'] >= 5000000, ['名前', '年収(円)']]
high_income

7.2 ilocを使った位置指定抽出

# 先頭5行の0列目と3列目を取り出す
top5 = df.iloc[0:5, [0, 3]]
top5

8. locとilocの違いまとめ表

項目 loc iloc
指定方法 ラベル名(列名や行名) インデックス番号
範囲指定 終了位置も含む 終了位置は含まない
列名で指定できる? できる できない(エラーになる)
使いやすい場面 列名がわかっているとき 列番号で一括処理したいとき

9. ワンポイントアドバイス

locとilocを使い分けられるようになると、Pandasでのデータ操作が驚くほど快適になります!
最初は戸惑っても、実際に手を動かしながら慣れていきましょう!

次回は、データを条件に応じて絞り込む「フィルタリング」の方法を紹介します!

▲ ページトップへ戻る

コメント

タイトルとURLをコピーしました