パハットノート

主にUnity(C#)を中心としたプログラムの備忘録

Pandas データの抽出・アクセス(iat, at, iloc, loc, 条件指定など)






前提

以下の例では次の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番号]
によりアクセスする。
ちなみに、負の数を指定することもできる。
その場合は、末尾から数えていると考えるとわかりやすい。

コード 取得できる値
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の指定

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


No. コード 実行結果
(1) df.iloc[2]
(2) df.iloc[-1]
(3) df.iloc[0:2]
(4) df.iloc[[0, 2]]
(5) 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



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

  • dataFrame[条件式]とすることで、条件式を満たすindexのみを取得。
  • dataFrame.loc[条件式]とすることでも、同様の処理が可能。
  • 条件を複数指定でき、各条件を括弧で括った上で、andの場合は「&」、orの場合は「|」で条件を列挙する。
  • また、dataFrame.loc[条件式, column名]とすることで、条件を満たすcolumnsのみを抽出することも可能。


コード 実行結果
df[5 < df.X]
df.loc[5 < df.X]
df[(4 <= df.X) & (df.Y < 9)]
df[(8 < df.X) | (df.Z < 5)]
df.loc[(df.Y == 2) | (df.Y == 8), ['X', 'Y']]