【loc,iloc,at,iat】Pandasで要素を抽出する方法【Python】

Python [文法解説]

任意の要素を抽出する4つの方法

Pandasでは、任意の要素を抽出する方法として下記が挙げられます。

  • loc
  • iloc
  • iat
  • at

要素を抽出する方法だけで4つも選択肢があるので、どの方法を選択すればよいか困ってしまいますよね。

しかし、上記の4つには重要な違いがあるので、ケースに応じて選択する必要があります。

loc, iloc, iat, at の違い

そこで、まずはそれぞれの違いについて簡単に説明します。

参照方法 参照位置の指定方法 参照可能な要素数
loc 行ラベル名、列ラベル名 1要素、または複数要素
iloc 行番号、列番号 1要素、または複数要素
at 行ラベル名、列ラベル名 1要素のみ
iat 行番号、列番号 1要素のみ

上記の表のように、それぞれの参照要素は

  • 参照位置の指定方法
  • 参照可能な要素数

の観点で異なります。

また、「参照可能な要素数」に着目すると、loc, ilocは単一・複数要素の参照が可能なので、at, iatは使用しなくてもよいと思われるかもしれません。

しかし単一要素を参照する場合、iat, at の方が処理速度が速いです。

なので、下記のような使い分けをお勧めします。

  • 単一要素を参照する場合:
     → at、またはiat
  • 複数要素を参照する場合:
     → loc、またはiloc

使用例

以降では、サンプルコードを使用して loc, iloc, at, iat の使い方を解説します。

使用するDataFrameのサイズは2×2で、ラベル名は

  • 行ラベル:row1, row2
  • 列ラベル:col1, col2

となります。

import pandas as pd

df = pd.DataFrame(data={'col1': [0, 1], 'col2': [2, 3]}, index=['row1', 'row2'])
print(df)

      col1  col2
row1     0     2
row2     1     3

(1) loc

参照方法 参照位置の指定方法 参照可能な要素数
loc 行ラベル名、列ラベル名 1要素、または複数要素
iloc 行番号、列番号 1要素、または複数要素
at 行ラベル名、列ラベル名 1要素のみ
iat 行番号、列番号 1要素のみ

単一要素を抽出する場合

# locで単一要素を抽出
a = df.loc['row1', 'col1']

# 結果出力
print(a)
>>> 0

複数要素を抽出する場合

複数要素を抽出する方法としては、

  • スライスで指定する方法
  • リストで指定する方法

の2つがあります。

①スライスで指定する方法
# locで複数要素を抽出(スライス)
a = df.loc['row1':'row2', 'col1']

# 結果出力
print(a)
>>> row1    0
>>> row2    1
>>> Name: col1, dtype: int64
②リストで指定する方法
# locで複数要素を抽出(リスト)
a = df.loc[['row1', 'row2'], 'col1']

# 結果出力
print(a)
>>> row1    0
>>> row2    1
>>> Name: col1, dtype: int64

行ごと取得する場合

# locで行ごと抽出
a = df.loc['row1', :]

# 結果出力
print(a)
>>> col1    0
>>> col2    1
>>> Name: col1, dtype: int64

列ごと取得する場合

# locで列ごと抽出
a = df.loc[:, 'col1']

# 結果出力
print(a)
>>> row1    0
>>> row2    1
>>> Name: col1, dtype: int64

(2) iloc

参照方法 参照位置の指定方法 参照可能な要素数
loc 行ラベル名、列ラベル名 1要素、または複数要素
iloc 行番号、列番号 1要素、または複数要素
at 行ラベル名、列ラベル名 1要素のみ
iat 行番号、列番号 1要素のみ

locとの相違点は要素の指定方法だけなので、ここでは「単一要素を指定する場合」のみを紹介します。

  • loc :ラベル名で指定
  • iloc:要素番号で指定

単一要素を指定する場合

# ilocで単一要素を抽出
a = df.iloc[0, 0]

# 結果出力
print(a)
>>> 0

Pythonは基本的に0始まりなので、1列目の要素指定する場合は引数に ‘0’ を指定する必要があります。

(3) iat

参照方法 参照位置の指定方法 参照可能な要素数
loc 行ラベル名、列ラベル名 1要素、または複数要素
iloc 行番号、列番号 1要素、または複数要素
at 行ラベル名、列ラベル名 1要素のみ
iat 行番号、列番号 1要素のみ

単一要素を指定する場合

# atで単一要素を抽出
a = df.at['row1', 'col1']

# 結果出力
print(a)
>>> 0

(4) at

参照方法 参照位置の指定方法 参照可能な要素数
loc 行ラベル名、列ラベル名 1要素、または複数要素
iloc 行番号、列番号 1要素、または複数要素
at 行ラベル名、列ラベル名 1要素のみ
iat 行番号、列番号 1要素のみ

単一要素を指定する場合

# atで単一要素を抽出
a = df.iat[0, 0]

# 結果出力
print(a)
>>> 0

コメント

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