PythonのPandasのlocとilocの違いについて

AI実装検定のご案内

Pythonの Pandas における .loc.iloc の違いについて、詳しく体系的に解説します。

両者は「データフレームの行や列を抽出するためのインデクサ」ですが、使い方と挙動に明確な違いがあります。

目次

基本的な違い

  • .loc
    ラベルベース(インデックスや列名で指定)
    行や列を「名前」で選択する。
  • .iloc
    整数位置ベース(行番号や列番号で指定)
    行や列を「番号」で選択する。

具体例

まず、例となるデータフレームを作ります。

import pandas as pd

df = pd.DataFrame({
    "A": [10, 20, 30, 40],
    "B": [50, 60, 70, 80],
    "C": [90, 100, 110, 120]
}, index=["row1", "row2", "row3", "row4"])

print(df)

.loc の例(ラベル指定)

# 行ラベル指定
df.loc["row2"]       # row2 のデータ
df.loc[["row1","row3"]]  # 複数行

# 行と列の両方
df.loc["row2", "B"]     # 値 60
df.loc[["row2","row3"], ["A","C"]]  # 行と列の組み合わせ

# 範囲指定(ラベルは inclusive)
df.loc["row1":"row3"]   # row1, row2, row3 が含まれる

.iloc の例(番号指定)

# 行番号指定
df.iloc[1]        # 2行目 (row2)
df.iloc[[0,2]]    # 1行目と3行目

# 行と列の両方
df.iloc[1, 1]     # 2行目×2列目 → 値 60
df.iloc[1:3, 0:2] # 行2〜3, 列1〜2(範囲は Python のスライス仕様で末尾は含まれない)

# 範囲指定(番号は exclusive)
df.iloc[0:2]      # row1, row2 が含まれる

.loc.iloc の挙動の違いまとめ

特徴.loc.iloc
指定方法行・列のラベル(名前)行・列の整数位置
範囲スライス末尾含む末尾含まない
ブール条件使用可能使用不可
エラー挙動存在しないラベルを指定するとエラー存在しない番号を指定するとエラー

よくある間違いと注意点

  • 範囲指定の違い
    • df.loc["row1":"row3"] → row3 を含む
    • df.iloc[0:3] → 3番目の行は含まれない
  • 混同しやすいケース
    インデックスが整数のとき(例: 0,1,2,3…)
    • df.loc[1] は「ラベル 1 の行」を探す
    • df.iloc[1] は「2行目(0始まり)」を探す
      → データフレームのインデックスに「整数」を使っているとバグを生みやすい
  • 条件抽出は loc df.loc[df["A"] > 20] # OK df.iloc[df["A"] > 20] # エラー

使い分けの指針

  • 列名・行名で抽出したいとき.loc
  • 番号で抽出したいとき.iloc
  • 範囲指定するときは inclusive/exclusive の違いに注意。
  • 条件抽出.loc を使う。

まとめ

  • .loc → 「ラベル(名前)で選ぶ」。範囲指定は末尾を含む。条件指定に対応。
  • .iloc → 「整数番号で選ぶ」。範囲指定は末尾を含まない。条件指定不可。

以上、PythonのPandasのlocとilocの違いについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次