パハットノート

※当サイトではGoogleアドセンス広告を利用しています

Pandas loc, at, iloc, iatで要素抽出



使用データ

以下の例では次のDataFrameを使用しています。

import pandas as pd
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]], 
    index=["Zero", "One", "Two", "Three"], 
    columns=["X", "Y", "Z"])
df

使用データ



単独の要素を取得

iat(index・column番号から)

  • dataFrame.iat[index番号, columns番号]によりアクセスする。
  • 負の数-nを指定すると、末尾からn番目の要素を取り出す。
コード 取得できる値
df.iat[2, 0] 7
df.iat[3, 2] 12
df.iat[2, -1] 9
df.iat[-2, 1] 8




at(index・column名から)

dataFrame.at[index名, columns名]
によりアクセスする。

コード 取得できる値
df.at['One', 'X'] 4
df.at['Two', 'Z'] 9





iloc(番号による範囲取得)

indexの指定

  • (1). dataFrame.iloc[n]とすることで、n番目のindexのみを取得することができる。
  • (2). ilocにおいても、iatと同じように負の数を指定することが可能。
  • (3). 「m:n」とすることで、m ~ n-1番目のみを取得することができる。n番目は含まれない点に注意。
  • (4). リストを指定することで、指定した複数行のみを取得できる。
  • (5). ilocを記述せずに、index番号のみを指定する方法もある。
No. コード 実行結果
(1) df.iloc[2] df.iloc(2)
(2) df.iloc[-1] df.iloc(-1)
(3) df.iloc[0:2] df.iloc(0:2)
(4) df.iloc[[0, 2]] df.iloc(0, 2)
(5) df[1] df(1)



columnの指定

  • dataFrame.iloc[:, n]とすることで、n番目のcolumnのみを取得することができる。

基本的なことは、先ほどと同様なので省略。


行・列を指定

先ほどの「行の指定」と「列の指定」を併用することで、指定した
indexの指定したcolumnsを取得できる。

コード 実行結果
df.iloc[[0, 2], 0:2] 行と列を普通に指定
df.iloc[-1, [0, 2]] 行番号が負
df.iloc[[0, 3], :]
(df.iloc[[0, 3]]と同じ)
列は全選択





loc(文字列による範囲取得)

使用例

locも基本的な考え方は、ilocと同様である。

  1. dataFrame.loc[:, 'A']
  2. dataFrame['A']
  3. dataFrame.A

は、まったく同じ結果が取得できる。ilocの(5)と似ているが、こちらはcolumn名を指定するという違いがある。
3は短く記述できるが、index名にスペースなどの特殊文字を含む場合は使用できない。個人的には2がオススメ。

コード 実行結果
df.loc['Zero':'Two'] 文字列での範囲指定
df.loc[:, ['X', 'Z']] 文字列での範囲指定(行は全選択)
df.loc[:, 'Y']
df['Y']
df.Y
Y列目のみ取り出す



条件を満たす行 or 列のみ取得

  • dataFrame[条件式]とすることで、条件式を満たすindexのみを取得。
  • dataFrame.loc[条件式]とすることでも、同様の処理が可能。
  • 条件を複数指定でき、各条件を括弧で括った上で、andの場合は「&」、orの場合は「|」で条件を列挙する。
  • また、dataFrame.loc[条件式, column名]とすることで、条件を満たすcolumnsのみを抽出することも可能。
コード 実行結果
df[5 < df.X]
df.loc[5 < df.X]
Xが5以上の要素のみ取り出す
df[(4 <= df.X) & (df.Y < 9)] Xが4以上 and Yが9未満
df[(8 < df.X) | (df.Z < 5)] Xが8より上 or Zが5未満
df.loc[(df.Y == 2) | (df.Y == 8), ['X', 'Y']] Yが2または8