使用したデータ
以下の例では次の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の指定
- 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と同様である。
- dataFrame.loc[:, 'A']
- dataFrame['A']
- 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']] |