Pandasのlocとiloc:データ整形メソッドの使い方と違い

DX

今回の記事では、データ整形でよく使う、pandasのlocおよびilocメソッドについて解説します。よく似たメソッドなので、どう違うのか?どういった場面で使い分けすべきか?を含めて紹介したいと思います。なお、今回の記事はpandas公式チュートリアルを参考にしています。

loc

iloc

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に持つ全く同じデータになります。

上記コードを実行したときの結果。aとbいずれも全く同じ結果になっている。

上記のデータでは、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]
コードの実行結果。データフレーム型でxが返ってきている。

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は行と列を名前で指定可能。条件指定でデータを取得することもできる。

今後もデータ分析や製造現場の最前線で活用できる知識を発信していきます!リクエストあればどしどしコメントよろしくお願いします!

コメント

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