データを抽出したい(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")

andornotを使って複数の条件を組み合わせることができます。

注釈

notは条件式が読みにくくなるため、僕は使いません。 不一致の記号(!=)もしくは比較の不等号を反転するようにしています。 また、AND検索とOR検索はついつい&&||と書いてしまうのですが、&|は1つです。