pandas.DataFrameのデータ検索(loc,iloc,query)

当ページではpandas.DataFrameのデータの検索方法を記載している。
pandas.DataFrameのデータを作成する方法は、別途以下で記載している。
pandas.DataFrameの表を作成する方法 | エクヌツITブログ

1.前提

本ページでは、以下のデータをベースのデータとして扱い、
そのデータが各作業でどのようになるかを説明する。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1, 2, 3], [6, 5, 4], [7, 8, 9]]),
                   columns=['a', 'b', 'c'],index=['d', 'e', 'f'])
print(df)

実行結果:

   a  b  c
d  1  2  3
e  6  5  4
f  7  8  9

2.特定の行の検索

以下の3つの方法で検索することが出来る。
(a)行数を指定して検索する方法
(b)行名を指定して検索する方法
(c)条件を指定して検索する方法

(a)行数を指定して検索する

何行目かを設定してデータを取得するときは以下のように[iloc]を使用して設定する。
ilocの配列に複数の要素を設定することで、同時に複数行のデータを取得することができる。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1, 2, 3], [6, 5, 4], [7, 8, 9]]),
                   columns=['a', 'b', 'c'],index=['d', 'e', 'f'])
print("初期データ") 
print(df) 

print("1行目のデータを取得") 
print(df.iloc[[1]]) 
print("1行目・2行目のデータを取得") 
print(df.iloc[[1,2]]) 

実行結果:

初期データ
   a  b  c
d  1  2  3
e  6  5  4
f  7  8  9
1行目のデータを取得
   a  b  c
e  6  5  4
1行目・2行目のデータを取得
   a  b  c
e  6  5  4
f  7  8  9

(b)行名を指定して検索する

行名を設定してデータを取得するときは以下のように[loc]を使用して設定する。
locの配列に複数の要素を設定することで、同時に複数行のデータを取得することができる。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1, 2, 3], [6, 5, 4], [7, 8, 9]]),
                   columns=['a', 'b', 'c'],index=['d', 'e', 'f'])
print("初期データ") 
print(df) 

print("e行のデータを取得") 
print(df.loc[["e"]]) 
print("e行・f行のデータを取得") 
print(df.loc[["e","f"]]) 

実行結果:

初期データ
   a  b  c
d  1  2  3
e  6  5  4
f  7  8  9
e行のデータを取得
   a  b  c
e  6  5  4
e行・f行のデータを取得
   a  b  c
e  6  5  4
f  7  8  9

(c)条件を指定して検索する方法

1カラムの要素による検索

カラムの要素による検索を使用するときは以下のように[loc]を使用して設定する。
locの配列に複数の要素を設定することで、同時に複数の列の検索をして、データを取得することができる。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1, 2, 3], [6, 5, 4], [7, 8, 9]]),
                   columns=['a', 'b', 'c'],index=['d', 'e', 'f'])
print("初期データ") 
print(df) 
print("カラムaの値が5より大きいデータの取得")
print(df.loc[df['a'] > 5]) 
print("カラムaの値が5より大きいデータ、且つ、カラムcの値が5より小さいデータの取得")
print(df.loc[(df['a'] > 5) & (df['c'] < 5)]) 

実行結果:

初期データ
   a  b  c
d  1  2  3
e  6  5  4
f  7  8  9
カラムaの値が5より大きいデータの取得
   a  b  c
e  6  5  4
f  7  8  9
カラムaの値が5より大きいデータ、且つ、カラムcの値が5より小さいデータの取得
   a  b  c
e  6  5  4

9行目では、aが5より大きいデータを取得して表示する。
11行目では、aが5より大きいデータ、且つ、cが5より小さいデータを取得して表示する。
複数条件によって検索するときは、locの[]内に&を入れて二つの条件を設定する。
2つ以上条件がある場合はそれぞれを括弧で囲んで設定する。

2つ以上のカラムの比較による検索

2つのカラム同士を比較して検索するときは以下のように[query]を使用して設定する。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1, 2, 3], [6, 5, 4], [7, 8, 9]]),
                   columns=['a', 'b', 'c'],index=['d', 'e', 'f'])
print("初期データ") 
print(df) 
print("カラムaの値がカラムbより大きいデータの取得")
print(df.query('a > b')) 

9行目では、カラムaの値がカラムbより大きいデータを取得して表示している。
以下の演算子で比較を行える

比較演算子意味設定例
==[左]と[右]が同等df.query(‘a == b’)
!=[左]と[右]が異なるdf.query(‘a != b’)
<[左]が[右]より小さいdf.query(‘a < b’)
<=[左]が[右]以下df.query(‘a <= b’)
>=[左]が[右]以上df.query(‘a >= b’)
>[左]が[右]より大きいdf.query(‘a > b’)

設定例は以下の通り。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1, 2, 3], [6, 5, 4], [7, 7, 7]]),
                   columns=['a', 'b', 'c'],index=['d', 'e', 'f'])
print("初期データ") 
print(df) 
print("カラムaの値がカラムbより大きいデータの取得")
print("a>b")
print(df.query('a > b')) 
print("a>=b")
print(df.query('a >= b')) 
print("a<=b")
print(df.query('a <= b')) 
print("a<b")
print(df.query('a < b')) 
print("a==b")
print(df.query('a == b')) 
print("a!=b")
print(df.query('a != b')) 

実行結果:

初期データ
   a  b  c
d  1  2  3
e  6  5  4
f  7  7  7
カラムaの値がカラムbより大きいデータの取得
a>b
   a  b  c
e  6  5  4
a>=b
   a  b  c
e  6  5  4
f  7  7  7
a<=b
   a  b  c
d  1  2  3
f  7  7  7
a<b
   a  b  c
d  1  2  3
a==b
   a  b  c
f  7  7  7
a!=b
   a  b  c
d  1  2  3
e  6  5  4

3.参考

公式ドキュメント:
列名検索
loc
https://pandas.pydata.org/pandas-docs/version/2.3/reference/api/pandas.DataFrame.loc.html
iloc
https://pandas.pydata.org/pandas-docs/version/2.3/reference/api/pandas.DataFrame.iloc.html#pandas.DataFrame.iloc
条件検索
loc
https://pandas.pydata.org/pandas-docs/version/2.3/reference/api/pandas.DataFrame.loc.html
query
https://pandas.pydata.org/pandas-docs/version/2.3/reference/api/pandas.DataFrame.query.html#pandas.DataFrame.query

表の作成
pandas.DataFrameの表を作成する方法 | エクヌツITブログ
pandas値の取得・更新・削除
pandas.DataFrameの値の取得・更新・削除 | エクヌツITブログ
pandasのカラム追加・削除
pandasのカラム追加・削除(assign・drop) | エクヌツITブログ
pandasのインポート
pandasのインポートread_csv,read_excel | エクヌツITブログ
pandasのエクスポート
pandasデータのエクスポートto_csv,to_excel | エクヌツITブログ
pandasの要素数取得
pandas.DataFrame要素数を取得size,count | エクヌツITブログ

コメント

タイトルとURLをコピーしました