今回はPandasのデータフレームから特定の行や列を取得する方法をマスターしましょう。必ず何度も使うことになる大事な内容なので、しっかり学習しましょう。
もくじ
時間がない方のための取得方法まとめ表
すぐに知りたい方や、学習したが、ど忘れしてしまった方向けに表形式で取得方法を一覧でまとめました。急いでいる方はこちらをご覧ください。
df[“A”] | A列をSeriesとして取り出す |
df.A | A列をSeriesとして取り出す |
df[0:2] | 0~2行目 |
df[:3] | 0~3行目 |
df[“Alpha”:”Beta”] | Alpha~Betaの行を取り出す |
df.loc[“Beta”] | Betaの行を取り出す |
df.loc[:, [“A”, “B”]] | AとBの列を取り出す |
df.loc[“Alpha”:”Beta”,[“A”, “B”]] | Alpha~Betaの行のAとB |
df.iloc[0] | 0行目 |
df.iloc[1][1] | 1行目の1列目 |
df.iloc[[1, 2],[0, 1]] | 1, 2行目の0, 1列 |
df.iloc[1:2, :] | 1~2行目のすべての列 |
df.iloc[:, 0:1] | すべての行の0~1列 |
df.at[“Alpha”, “B”] | Alphaの行のB |
df.iat[1, 2] | 1行目の2列目 |
df[df.A > 5] | Aの値が5より大きいすべての行 |
df.[df > 5] | 5より大きいすべての要素、他はNaN |
df[df[“A”].isin([1, 1000])] | A列に 1 または 1000 の値を持つ行。※isinの引数はリスト型 |
データフレームからのデータ抽出をマスターする
それでは詳細にご紹介していきます。一般的な行・列の指定の仕方と、locやilocを使い複数条件をつけて抽出する方法、またatやiatといった単一条件で抽出する方法を順に説明していきます。一番最後には、とても便利なisin属性について触れています。こちらは要チェックです。
特定の列を取得する
2種類の取得方法がありますが、両方とも同じ結果が返ってきます。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Alpha', 'Beta','Gamma','Delta'], columns=['A','B','C']) >>> df A B C Alpha 1 2 3 Beta 10 20 30 Gamma 100 200 300 Delta 1000 2000 3000 >>> # A列を抽出する >>> df["A"] Alpha 1 Beta 10 Gamma 100 Delta 1000 Name: A, dtype: int64 >>> # ドットを使用しても同じ結果が返ります >>> df.A Alpha 1 Beta 10 Gamma 100 Delta 1000 Name: A, dtype: int64
特定の区間の行を取得する
次に行を指定して取得する方法です。:コロンは頻繁に使うので使い方を覚えておきましょう。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Alpha', 'Beta','Gamma','Delta'], columns=['A','B','C']) >>> df A B C Alpha 1 2 3 Beta 10 20 30 Gamma 100 200 300 Delta 1000 2000 3000 >>> # 0行目から2行目までを取得 >>> df[0:2] A B C Alpha 1 2 3 Beta 10 20 30 >>> # 0行目から3行目までを取得 >>> df[:3] A B C Alpha 1 2 3 Beta 10 20 30 Gamma 100 200 300
また、行名を指定して取得することもできます。
>>> df["Alpha":"Beta"] A B C Alpha 1 2 3 Beta 10 20 30
loc属性(アトリビュート)を使って特定の行・列を取得する
データフレームから特定のデータを抽出する際にもっともlocを使う方が多いです。とても便利なので覚えておいて損はありません。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Alpha', 'Beta','Gamma','Delta'], columns=['A','B','C']) >>> df A B C Alpha 1 2 3 Beta 10 20 30 Gamma 100 200 300 Delta 1000 2000 3000 >>> # loc属性を使用して特定の行を抽出 >>> df.loc["Beta"] A 10 B 20 C 30 Name: Beta, dtype: int64 >>> # AとB列をすべて >>> df.loc[:, ["A", "B"]] A B Alpha 1 2 Beta 10 20 Gamma 100 200 Delta 1000 2000 >>> # AlphaとBetaのA, B列を取得 >>> df.loc["Alpha":"Beta",["A", "B"]] A B Alpha 1 2 Beta 10 20
iloc属性を使って特定の行・列を取得する
ilocはlocと異なり、行や列の位置を数値で指定することができる属性です。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Alpha', 'Beta','Gamma','Delta'], columns=['A','B','C']) >>> df A B C Alpha 1 2 3 Beta 10 20 30 Gamma 100 200 300 Delta 1000 2000 3000 >>> # 0行目 >>> df.iloc[0] A 1 B 2 C 3 Name: Alpha, dtype: int64 >>> # 1行目の1列目 >>> df.iloc[1][1] 20 >>> # 1, 2行目の0, 1列を取得 >>> df.iloc[[1, 2],[0, 1]] A B Beta 10 20 Gamma 100 200 >>> # 1~2行目のすべての列を取得 >>> df.iloc[1:2, :] A B C Beta 10 20 30 >>> # すべての行の0~1列 >>> df.iloc[:, 0:1] A Alpha 1 Beta 10 Gamma 100 Delta 1000
at属性を使って特定の行・列を取得する
単一の指定しかできないので、出来ることとしてはloc属性に劣る部分があります。ただloc属性より直感的で分かりやすいのがat属性です。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Alpha', 'Beta','Gamma','Delta'], columns=['A','B','C']) >>> df A B C Alpha 1 2 3 Beta 10 20 30 Gamma 100 200 300 Delta 1000 2000 3000 >>> df.at["Alpha", "B"] 2
iat属性を使って特定の行・列を取得する
loc属性とiloc属性の関係と同様です。at属性の形で行と列を数値指定したものがiat属性になります。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Alpha', 'Beta','Gamma','Delta'], columns=['A','B','C']) >>> df A B C Alpha 1 2 3 Beta 10 20 30 Gamma 100 200 300 Delta 1000 2000 3000 >>> df.iat[1, 2] 30
条件を指定して行・列を取得する(isin属性)
ここまで属性を使用した場合の、データ取得方法を見てきました。属性を使わない場合に、条件を指定したい場合の例をご紹介します。
また、最後に紹介しているisin属性は、データフレーム内に特定の数値が存在しているかどうか調べる時にとても便利です。
>>> df=pd.DataFrame([[1,2,3],[10,20,30],[100,200,300],[1000,2000,3000]], index=['Alpha', 'Beta','Gamma','Delta'], columns=['A','B','C']) >>> df A B C Alpha 1 2 3 Beta 10 20 30 Gamma 100 200 300 Delta 1000 2000 3000 >>> # Aの値が5より大きいすべての行 >>> df[df.A > 5] A B C Beta 10 20 30 Gamma 100 200 300 Delta 1000 2000 3000 >>> # 5より大きいすべての要素、他はNaN >>> df[df > 5] A B C Alpha NaN NaN NaN Beta 10.0 20.0 30.0 Gamma 100.0 200.0 300.0 Delta 1000.0 2000.0 3000.0 >>> A列に 1 または 1000 を値に持つ行を抽出 >>> df[df["A"].isin([1, 1000])] A B C Alpha 1 2 3 Delta 1000 2000 3000
まとめ
データフレームの特定の行・列の取得方法を解説してきました。最後にこの記事のまとめを書いておきます。
- データフレームから取得する方法はいくつかある
- locでラベル名を指定して抽出できる
- ilocで行と列の位置を値で指定する
- atではlocと異なり、単一の指定
- isinはデータフレーム内の調査にとても便利
- ページ上部のまとめ表を見れば大丈夫