【Pandas】データフレームから特定の行・列を取得する方法を総まとめ!

今回は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の引数はリスト型

データフレームからのデータ抽出をマスターする

それでは詳細にご紹介していきます。一般的な行・列の指定の仕方と、locilocを使い複数条件をつけて抽出する方法、またatiatといった単一条件で抽出する方法を順に説明していきます。一番最後には、とても便利な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はデータフレーム内の調査にとても便利
  • ページ上部のまとめ表を見れば大丈夫