loc関数とiloc関数はどちらもDataFrameやSeriesから特定のデータを抽出できます。使い方としては微妙な違いがあるのですが、どうしても覚えられず、毎回検索して調べながら使っています・・・。何度も調べるのが面倒ですので、自分の覚えも兼ねてここにまとめておきます。
この記事でわかること
・locとilocの違いがわかる
相違点の一覧
違いを簡単にまとめると以下のようになります。大きな違いとしては、ラベルベースか位置ベースかの違いになります。
loc | iloc | |
場所の指定方法 | ラベルベース | 位置ベース |
入力値 | ラベル名、ラベル名のリスト、ラベルの範囲 | 整数、整数のリスト、整数の範囲 |
スライスの動作 | 範囲の終端を含む | 範囲の終端を含まない |
使用例 | 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の場合は終端を含まないことには注意が必要です。
以上、参考になれば幸いです。