今回の記事では、データ整形でよく使う、pandasのlocおよびilocメソッドについて解説します。よく似たメソッドなので、どう違うのか?どういった場面で使い分けすべきか?を含めて紹介したいと思います。なお、今回の記事はpandas公式チュートリアルを参考にしています。
locとilocの共通点と使い分け
locとilocの共通点
locとilocはいずれもデータフレームのindexを指定してデータを取得するメソッドです。例えば、下のようなデータフレームを扱うときはlocとilocいずれを使っても同じ結果が返ってきます。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(1, 31).reshape(10, 3),
columns=['A', 'B', 'C'])
a = df.loc[0]
print(a.dtype)
b = df.iloc[0]
print(b.dtype)
作成したデータフレーム(df)に対して、locとilocでindex = 0のデータを抜き取りました。実行すればわかりますが、aとbいずれもSeriesで、dfのコラム名A, B, Cをindexに持つ全く同じデータになります。

上記のデータでは、locとilocは同じ結果を出力します。以下ではlocとilocの使い分けを解説します。
ilocの使い方
ilocは、データフレームの行と列の位置を番号で指定して抜き取る手法と言えます。先程はindex = 0で指定しましたが、今回の例(x)のように行と列番号の範囲で指定すると、データフレームとして返ってきます。個人的には、locよりもilocを多用しています。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(1, 31).reshape(10, 3),
columns=['A', 'B', 'C'])
# 範囲指定する。[(始まりの行):(終わりの行+1), (始まりの列):(終わりの列+1)]で指定
x = df.iloc[0:1, 1:2]

locの使い方
locは「行名や列名で抜き取るデータを指定できること」、「booleanでデータを取り出す行を指定できる」特徴があります。booleanでデータを抜き取れるため、「ある数値以上のデータを含む行(or列)を抜き取る」や「ある数値にマッチするときにデータを抜き取る」などの条件を指定してデータを取得可能になります。コードを使うと、以下のような表現でデータを取得できるということになります。
#locを使ったデータ抜き取り例
#列名を使った取得
df.loc[0, "B"]
#booleanを使った(条件を使った)抜き取り。B列のデータで5より大きいものを抜き取る
df.loc[df["B"] > 5]
#複数条件を用いてぬきとることも可能。今回は&(または)という論理演算子を使用
df.loc[(df["B"] > 5) & (df["C"]>3)]
まとめ
以上、ilocとlocの使い分けについて解説をしました。
- locもilocもindexを指定してデータを抜き取るという基本は同じ
- ilocは行と列を番号で指定してデータを抜き取れる
- locは行と列を名前で指定可能。条件指定でデータを取得することもできる。
今後もデータ分析や製造現場の最前線で活用できる知識を発信していきます!リクエストあればどしどしコメントよろしくお願いします!
コメント