【Python】Pandasのquery()関数で列の値に基づいて行をフィルタリングする方法
Pandasのquery()関数とは?
PythonのPandasでは、query()関数を使うことで、列の値に基づいてDataFrameの行を簡単にフィルタリングできます。抽出したい条件を文字列式として引数に渡すだけでよく、SQLのような直感的な書き方でデータを絞り込めるのが大きな特徴です。
まずは、必要なライブラリをインポートしましょう。
import pandas as pd
サンプルデータの準備
ここでは、チームのランキングデータを例にして解説します。
Team = [['India', 1, 100], ['Australia', 2, 85], ['England', 3, 75],
['New Zealand', 4, 65], ['South Africa', 5, 50], ['Bangladesh', 6, 40]]
このリストをもとにDataFrameを作成し、あわせて列名を設定します。
dataFrame = pd.DataFrame(Team, columns=['Country', 'Rank', 'Points'])
単一条件で行を抽出する
「Rank」が5と等しいレコードだけを取り出すには、次のように記述します。
dataFrame.query("Rank == 5")
コード例①:Rankが5のチームを取得する
import pandas as pd
# チームのランキングデータ(リスト形式)
Team = [['India', 1, 100], ['Australia', 2, 85], ['England', 3, 75],
['New Zealand', 4, 65], ['South Africa', 5, 50], ['Bangladesh', 6, 40]]
# DataFrameを作成し、列名を設定
dataFrame = pd.DataFrame(Team, columns=['Country', 'Rank', 'Points'])
print("DataFrame...\n", dataFrame)
# query()を使って行をフィルタリング
print("\nRankが5のチームを取得...\n", dataFrame.query("Rank == 5"))
実行結果
DataFrame...
Country Rank Points
0 India 1 100
1 Australia 2 85
2 England 3 75
3 New Zealand 4 65
4 South Africa 5 50
5 Bangladesh 6 40
Rankが5のチームを取得...
Country Rank Points
4 South Africa 5 50
コード例②:複数条件で行を抽出する
query()関数では、andやorを使った複数条件の指定も可能です。ここでは「Points」が70より大きく、かつ「Rank」が3未満という条件でチームを抽出してみましょう。
import pandas as pd
# チームのランキングデータ(リスト形式)
Team = [['India', 1, 100], ['Australia', 2, 85], ['England', 3, 75],
['New Zealand', 4, 65], ['South Africa', 5, 50], ['Bangladesh', 6, 40]]
# DataFrameを作成し、列名を設定
dataFrame = pd.DataFrame(Team, columns=['Country', 'Rank', 'Points'])
print("DataFrame...\n", dataFrame)
# 複数条件で行をフィルタリング
print("\nPointsが70超かつRankが3未満のチームを取得...\n")
print(dataFrame.query("Points > 70 and Rank < 3"))
実行結果
DataFrame...
Country Rank Points
0 India 1 100
1 Australia 2 85
2 England 3 75
3 New Zealand 4 65
4 South Africa 5 50
5 Bangladesh 6 40
Pointsが70超かつRankが3未満のチームを取得...
Country Rank Points
0 India 1 100
1 Australia 2 85
まとめ
Pandasのquery()関数を使えば、列の値に基づいた行のフィルタリングをシンプルな条件式で実現できます。比較演算子(==、>、<など)に加え、and・orによる複数条件にも対応しているため、ブールインデックス参照よりも読みやすいコードを書ける場面が多くあります。データ分析の前処理や絞り込み処理に、ぜひ活用してみてください。
-
【Python】Pandasのreplace()メソッドでDataFrameの値を別のDataFrameの値に置き換える方法
Pandasでは、replace()メソッドを使うことで、あるDataFrameの値を別のDataFrameから取得した値に簡単に置き換えることができます。この記事では、2つのDataFrameを作成し、片方の値をもう片方の値で置き換える手順を、サンプルコードと実行結果とともにわかりやすく解説します。 基本的な流れ まず、元となる1つ目のDataFrameを作成します。 dataFrame1 = pd.DataFrame({Car: [Audi, Lamborghini], Place: [US, UK], Units: [200, 500]}) 次に、置き換え先となる2つ目のDataFram
-
Pythonで条件に基づいてPandasデータフレームに新しい列を作成する方法
Pythonプログラムにおいて、Pandasはデータフレームを作成してデータを処理します。本記事では、既存のデータフレームに対して、特定の条件に基づいて新しい列を追加する方法を解説します。 元となるデータフレーム 以下は、今回新しい列を追加していくPandasのデータフレームです。試験の曜日と科目を表すシンプルなデータとなっています。 サンプルコード import pandas as pd # 試験科目と曜日のリスト Days = [Mon, Tue, Wed,Thu, Fri] Sub = [Chemisry,Physics,Maths,English,Biology] # 試験スケジュ