【データ抽出】locとilocの違いがどうしても覚えられないのでまとめます【pandas】

【データ抽出】locとilocの違いがどうしても覚えられないのでまとめます【pandas】

loc関数とiloc関数はどちらもDataFrameやSeriesから特定のデータを抽出できます。使い方としては微妙な違いがあるのですが、どうしても覚えられず、毎回検索して調べながら使っています・・・。何度も調べるのが面倒ですので、自分の覚えも兼ねてここにまとめておきます。

この記事でわかること

・locとilocの違いがわかる

相違点の一覧

違いを簡単にまとめると以下のようになります。大きな違いとしては、ラベルベースか位置ベースかの違いになります。

lociloc
場所の指定方法ラベルベース位置ベース
入力値ラベル名、ラベル名のリスト、ラベルの範囲整数、整数のリスト、整数の範囲
スライスの動作範囲の終端を含む範囲の終端を含まない
使用例df.loc['x']:行xを取り出す
df.loc['x':'z']:行xからzを取り出す
df.loc['x', 'A']:行xかつ列Aを取り出す
df.iloc[0]:0番目の行を取り出す
df.iloc[0:2]:0から1番目までの行を取り出す
df.iloc[0, 0]:0番目の行かつ0番目の列を取り出す

具体例

以下に具体例を上げていきます。まず、サンプルデータを作成します。

import pandas as pd

data = {
    'A': [1, 2, 3, 4],
    'B': [5, 6, 7, 8],
    'C': [9, 10, 11, 12]
}
df = pd.DataFrame(data, index=['x', 'y', 'z', 'w'])
df
   A  B   C
x  1  5   9
y  2  6  10
z  3  7  11
w  4  8  12

このサンプルデータに対して、locとilocで抽出してみます。

# loc の使用例
print(df.loc['x'])      # 'x' というラベルの行を取得
print(df.loc['x', 'A']) # 'x' というラベルの行、'A' というカラムの要素を取得
print(df.loc['x':'z'])  # 'x' から 'z' までの行を取得(終端を含む)

# iloc の使用例
print(df.iloc[0])       # 0 番目の行を取得
print(df.iloc[0, 0])    # 0 番目の行、0 番目のカラムの要素を取得
print(df.iloc[0:2])     # 0 から 1 までの行を取得(終端を含まない)
df.loc['x']の場合
 A    1
B    5
C    9
Name: x, dtype: int64

df.loc['x','A']の場合
 1

df.loc['x':'z']の場合
    A  B   C
x  1  5   9
y  2  6  10
z  3  7  11

df.iloc[0]の場合
 A    1
B    5
C    9
Name: x, dtype: int64

df.iloc[0,0]の場合
 1

df.iloc[0:2]の場合
    A  B   C
x  1  5   9
y  2  6  10

どちらも行、列を指定できますし、スライスも使えます。ilocの場合は終端を含まないことには注意が必要です。

以上、参考になれば幸いです。