pandas.DataFrameからデータを抽出する方法6選|それぞれの使い方について詳しく紹介

pnandas.DataFrameからデータを抽出する方法6選

pythonでデータ分析をする際によく使われるpandas。

pandas.DataFrameから特定のデータを抽出して加工したい場合がありますよね。

この記事ではpandas.DataFrameからデータを抽出する方法を紹介します。

目次

pandas.DataFrameからデータを抽出する方法

pandas.DataFrameからデータを抽出する方法

pandas.DataFrameでデータを抽出する方法は次のようなものがあります。

コードがシンプルなスライスがおすすめです。

この記事のコードは全てグーグルコラボラトリーで記述・動作を確認しています。

準備

最初にpandasをインポートします。

import pandas as pd

今回はとある生徒達のテスト結果を使って抽出を紹介します。

point_list = [[51, 70, 35, 90, 100],
              [21, 0, 55, 50, 92],
              [14, 74, 23, 67, 44],
              [56, 29, 91, 66, 62],
              [89, 55, 73, 98, 60],
              [6, 22, 29, 78, 67],
              [34, 53, 20, 53, 43]]
point_data = pd.DataFrame(data=point_list, columns=['国語', '数学', '英語', '理科', '社会'], index=['A', 'B', 'C', 'D', 'E', 'F', 'G'])

point_data.head()

出力:

index国語数学英語理科社会
A51703590100
B210555092
C1474236744
D5629916662
E8955739860

直感的に行・列を抽出: スライス

直感的に行・列を抽出: スライス

pandasで行や列を抽出するお手軽な方法はスライスです。

スライスはdataFrame[ ]で角括弧内に行や列を指定するとデータをserieseの形で抽出します。

seriese_math = point_data['数学']
seriese_math

出力:

A 70
B 0
C 74
D 29
E 55
F 22
G 53
Name: 数学, dtype: int64

また、DataFrame[[‘カラム名’]]と記述するとDataFrameの形で抽出します。

複数の列を抽出する場合はコンマで区切ってカラム名を複数記述します。

data_mathsoc = point_data[['数学', '社会']]
data_mathsoc

出力:

index数学社会
A70100
B092
C7444
D2962
E5560
F2267
G5343

同様に行を指定して抽出することも可能です。

行を抽出する場合は[開始の行:終わりの行]の2つの値を入力する必要があります。

data_atoc = point_data['A':'C']
data_atoc

出力:

index国語数学英語理科社会
A51703590100
B210555092
C1474236744

もし1行のみ抽出したい場合は、開始の行と終わりの行に同じインデックス名を入力します。

data_d = point_data['D':'D']
data_d

出力:

index国語数学英語理科社会
D5629916662

条件を指定して、その条件を満たすデータのみ抽出することが可能です。

スライスする行に条件を設定すると、各列がその条件を満たしているかどうかをbool型(true, false)で返します。

この条件をDataFrame[]で囲むことで、条件を満たす行のみを抽出します。

bool_math = point_data['数学'] > 50
bool_math

出力:

A True
B False
C True
D False
E True
F False
G True
Name: 数学, dtype: bool

この条件をDataFrame[]で囲むことで、条件を満たす行のみを抽出します。

hipo_math = point_data[point_data['数学'] > 50]
hipo_math

出力:

index国語数学英語理科社会
A51703590100
C1474236744
E8955739860
G3453205343

条件に一致する行を抽出する: query()

条件に一致する行を抽出する: query()

query()関数を使用することで、設定した列の条件を満たす行データを抽出できます。

カッコの中に列に対する条件を文字列で記述すると使用可能です。

国語の点数が50点よりも高い生徒の各テスト結果をquery()で抽出してみましょう。

point_data.query('国語 > 50')

出力:

index国語数学英語理科社会
A51703590100
D5629916662
E8955739860

インデックス名・カラム名で行・列を抽出: loc[]

インデックス名・カラム名で行・列を抽出: loc[]

loc[]はインデックス名もしくはカラム名で参照して行や列を抽出します。

pandas.DataFrame.loc[‘インデックス名’]を指定することで、データの抽出が可能です。

それでは、Aさんのテスト結果を抽出します。

seloc_A = point_data.loc['A']
seloc_A

出力:

国語 51
数学 70
英語 35
理科 90
社会 100
Name: A, dtype: int64

ちなみにloc[[‘インデックス名’]]で、抽出結果をDataFrameの形で返します。

dfloc_A = point_data.loc[['A']]
dfloc_A

出力:

index国語数学英語理科社会
A51703590100

角カッコ内の記述方法にルールがあり、インデックス名, カラム名の順番に記述する必要があります。

指定したカラムのみ抽出したい場合は、loc[:, ‘カラム名’]です。

各生徒の数学の結果を抽出します。

loc_math = point_data.loc[:, '数学']
loc_math

出力:

A 70
B 0
C 74
D 29
E 55
F 22
G 53
Name: 数学, dtype: int64

カラム名に対して指定した条件で抽出することが可能です。

条件の指定はスライスを使って記述する必要があります。

数学の点数が60より高い生徒の各教科の結果を抽出してみましょう。

hiloc_math = point_data.loc[point_data['数学'] > 60]
hiloc_math

出力:

index国語数学英語理科社会
A51703590100
C1474236744

インデックス・カラム番号で行・列を抽出する: iloc[]

インデックス・カラム番号で行・列を抽出する: iloc[]

pandas.DataFrame.iloc[]は行番号、列番号を記入してデータを抽出できます。

1列目 (今回の表では国語とAさん)の番号は0である点に注意してください。

試しにBさんのテスト結果を抽出します。

dfiloc_be = point_data.iloc[[1,4]]
dfiloc_be

出力:

index国語数学英語理科社会
B210555092
E8955739860

列で抽出する方法や条件を指定する方法などはloc[]と同様です。

インデックスとカラム名を指定してデータを抽出: at[]

インデックスとカラム名を指定してデータを抽出: at[]

pandas.DataFrame.at[]の角括弧内にインデックスとカラム名を指定することで、データを抽出できます。

スライスやloc、ilocでもインデックスとカラムを指定すればデータを抽出可能ですが、at[]や次に紹介するiat[]で抽出する方が処理スピードが速いです。

【pandas公式】高速なスカラー値の取得と設定

Aさんの国語の点数を抽出してみます。

a_jap = point_data.at['A', '国語']
a_jap

出力:

51

インデックスとカラムの番号を指定してデータを抽出: iat[]

インデックスとカラムの番号を指定してデータを抽出: iat[]

pandas.DataFrame.iat[]の角括弧内に対応するインデックスとカラムの番号を記述すると指定したデータを抽出可能です。

iloc[]の時と同じく、1行目・1列目は0であることに注意です。

Dさんの社会の点数を抽出します。

d_soc = point_data.iat[3, 4]
d_soc

出力:

62

まとめ

今回はpandasでデータを抽出する方法を紹介しました。

スライスでの操作が簡単でおすすめですが、インデックスの指定がわかりづらいので、loc[]も使用するとわかりやすくなります。

この記事を読んでpythonをより勉強したいと思った人はこの記事で勉強方法も確認してみましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次