PandasのDataFrameのqueryメソッドの使い方|複数条件や変数、文字列でのやり方を解説

スポンサーリンク

このPythonチュートリアルでは、DataFrame.query()関数を使ってpandasのDataFrameに問い合わせる方法について説明します。

では、さっそく話を聞いてみましょう。


スポンサーリンク

pandasのDataFrame.query()関数のシンタックス

pandas.DataFrame.query(expr, inplace=False, **kwargs)` とします。

expr = pandas DataFrameの行を選択する論理式(expr=Trueの時)を含む文字列です。

inplace = DataFrameをインプレースで修正するか、修正したDataFrameの新しいコピーを返すかを決定するブーリアン値(True または False)です。

**kwargs = 他のキーワード引数がある場合、それを参照します。

DataFrame.query() 関数はいつ使うのか?

PandasはDataFrameオブジェクトから行を選択したり、フィルタリングしたりするための多くの方法/メソッドを提供しています。

そして、pandasの DataFrame.query() 関数はpandasのDataFrameオブジェクトの行をフィルタリングするための堅牢なメソッドの一つです。

そして、pandas の DataFrame オブジェクトの行を選択したり、フィルタリングしたりするには、伝統的でよく使われるインデックスの代わりに DataFrame.query() 関数を使用することが望ましいとされています。

この DataFrame.query() 関数は、他の pandas のメソッドと一緒に使うことで、データ操作をスムーズかつ簡単にすることができます

DataFrame.query()関数の例

それでは、pandasのDataFrameオブジェクトのサンプルを作成し、いくつかの例を参考に DataFrame.query() 関数の機能/動作を理解することに努めましょう。

サンプルpandas DataFrameオブジェクトの作成

# Import pandas Python module
import pandas as pd
 
# Create a pandas DataFrame object
df = pd.DataFrame({'Dept': ['ECE', 'ICE', 'IT', 'CSE', 'CHE', 'EE', 'TE', 'ME', 'CSE', 'IPE', 'ECE'],
                    'GPA': [8.85, 9.03, 7.85, 8.85, 9.45, 7.45, 6.85, 9.35, 6.53,8.85, 7.83],
                    'Name': ['Mohan', 'Gautam', 'Tanya', 'Rashmi', 'Kirti', 'Ravi', 'Sanjay', 'Naveen', 'Gaurav', 'Ram', 'Tom'],
                    'RegNo': [111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121],
                    'City': ['Biharsharif','Ranchi','Patna','Patiala','Rajgir','Patna','Patna','Mysore','Patna','Mumbai','Patna']})
 
# Print the created pandas DataFrame
print('Sample pandas DataFrame:
'
)
print(df)

結果を出力すると、以下の様になります。

Sample pandas DataFrame:
 
   Dept   GPA    Name  RegNo         City
0   ECE  8.85   Mohan    111  Biharsharif
1   ICE  9.03  Gautam    112       Ranchi
2    IT  7.85   Tanya    113        Patna
3   CSE  8.85  Rashmi    114      Patiala
4   CHE  9.45   Kirti    115       Rajgir
5    EE  7.45    Ravi    116        Patna
6    TE  6.85  Sanjay    117        Patna
7    ME  9.35  Naveen    118       Mysore
8   CSE  6.53  Gaurav    119        Patna
9   IPE  8.85     Ram    120       Mumbai
10  ECE  7.83     Tom    121        Patna

例 #1

サンプルのDataFrameのうち、(City = “Patna”)の行を選択します。

# Filter the rows of the sample DataFrame which has City = 'Patna'
# Using the DataFrame.query() function
df2 = df.query('City=="Patna"')
 
# Print the filtered sample pandas DataFrame
print('Filtered sample pandas DataFrame:
'
)
print(df2)

結果を出力すると、以下の様になります。

Filtered sample pandas DataFrame:
 
   Dept   GPA    Name  RegNo   City
2    IT  7.85   Tanya    113  Patna
5    EE  7.45    Ravi    116  Patna
6    TE  6.85  Sanjay    117  Patna
8   CSE  6.53  Gaurav    119  Patna
10  ECE  7.83     Tom    121  Patna

例 #2

サンプルのDataFrameのうち、(GPA < 8)の行を選択します。

# Filter the rows of the sample DataFrame which has GPA < 8
# Using the DataFrame.query() function
df2 = df.query('GPA < 8' & City == "Patna")
 
# Print the filtered sample pandas DataFrame
print('Filtered sample pandas DataFrame:
'
)
print(df2)

を結果を出力すると、以下の様になります。

Filtered sample pandas DataFrame:
 
   Dept   GPA    Name  RegNo   City
2    IT  7.85   Tanya    113  Patna
5    EE  7.45    Ravi    116  Patna
6    TE  6.85  Sanjay    117  Patna
8   CSE  6.53  Gaurav    119  Patna
10  ECE  7.83     Tom    121  Patna

例 #3

サンプルのDataFrameのうち、(GPA < 7 and City = ‘Patna’)の行を選択します。

# Filter the rows of the sample DataFrame which has GPA < 7 & City = 'Patna'
# Using the DataFrame.query() function
df2 = df.query('GPA < 7 & City == "Patna"')
 
# Print the filtered sample pandas DataFrame
print('Filtered sample pandas DataFrame:
'
)
print(df2)

結果を出力すると、以下の様になります。

Filtered sample pandas DataFrame:
 
  Dept   GPA    Name  RegNo   City
6   TE  6.85  Sanjay    117  Patna
8  CSE  6.53  Gaurav    119  Patna

例 #4

ECE, CSE, IT]にDepartmentを持つサンプルDataFrameの行を選択します。

# Filter the rows of the sample DataFrame which has Dept in (ECE, CSE, IT)
# Using the DataFrame.query() function
df2 = df.query("Dept in ['CSE','ECE','IT']")
 
# Print the filtered sample pandas DataFrame
print('Filtered sample pandas DataFrame:
'
)
print(df2)

出力せよ。

Filtered sample pandas DataFrame:
 
   Dept   GPA    Name  RegNo         City
0   ECE  8.85   Mohan    111  Biharsharif
2    IT  7.85   Tanya    113        Patna
3   CSE  8.85  Rashmi    114      Patiala
8   CSE  6.53  Gaurav    119        Patna
10  ECE  7.83     Tom    121        Patna

例 #5

サンプルのDataFrameのうち、(RegNo < 115 and GPA > 7)の行を選択します。

# Filter the rows of the sample DataFrame which has (RegNo < 115 & GPA > 7)
# Using the DataFrame.query() function
df2 = df.query("RegNo < 115 & GPA > 7")
 
# Print the filtered sample pandas DataFrame
print('Filtered sample pandas DataFrame:
'
)
print(df2)

結果は以下の通りです。

Filtered sample pandas DataFrame:
 
  Dept   GPA    Name  RegNo         City
0  ECE  8.85   Mohan    111  Biharsharif
1  ICE  9.03  Gautam    112       Ranchi
2   IT  7.85   Tanya    113        Patna
3  CSE  8.85  Rashmi    114      Patiala

まとめ

この Python チュートリアルでは、Pandas の DataFrame.query() 関数を使用して pandas DataFrame オブジェクトに問い合わせを行う方法を学びました。

このチュートリアルで説明したコンセプトと例を理解し、自分のpandas DataFrameにクエリを発行する準備ができていることを願っています。

お読みいただきありがとうございました。

これからもPythonプログラミングの素晴らしい学習コンテンツを提供していきますので、よろしくお願いします。

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