データを抽出したい(pandas.DataFrame.query
)
1data.query("カラム名 > 値")
pandas.DataFrame.queryを使って、条件に一致するデータを抽出できます。 条件式は、カラム名や値をそのまま使用できるためオススメです。
比較演算子したい
1data.query("age > 40")
2data.query("20 <= age < 50")
3data.query("name == 'John Doe'")
比較演算子(“<”、“<=”、“>”、“>=”)、 一致(“==”)、不一致(“!=”)の演算子がそのまま使えます。 文字列と比較する場合は、適切にクォートする必要があります。
参考
上記のサンプルは、以下のサンプルと同じ結果になります。
1data[data["age"] > 40]
2data[data["age"] <= 20 & data["age"] < 50]
3data[data["name"] == "John Doe"]
query
を使うと簡潔に記述できることが分かると思います。
変数したい
1age_min, age_max = 20, 50
2condition = f"{age_min} <= age < {age_max}"
3data.query(condition)
条件式は文字列なので、f文字列と組み合わせて変数にできます。
参考
1age_min, age_max = 20, 50
2data.query("@age_min <= age < @age_max)
条件式の中で@変数名
として変数を直接利用することもできます。
複数条件したい
1# AND
2data.query("age > 20 & mass > 60")
3data.query("age > 20 and mass > 60")
4
5# OR
6data.query("age > 20 | mass > 60")
7data.query("age > 20 or mass > 60")
8
9# NOT
10data.query("not age > 20 or not mass > 60")
and
、or
、not
を使って複数の条件を組み合わせることができます。
注釈
not
は条件式が読みにくくなるため、僕は使いません。
不一致の記号(!=
)もしくは比較の不等号を反転するようにしています。
また、AND検索とOR検索はついつい&&
と||
と書いてしまうのですが、&
と|
は1つです。