Pandas: filtrer une colonne avec une liste avec df.query()

pandas, python
Publié le 2017-02-26 | Jérémy Grèze

La fonction Dataframe.query() de la librairie Pandas permet de filtrer un dataframe avec une requête textuelle (string). Personnellement, j’aime bien la lisibilité que cela apporte et c’est facilement utilisable avec des booléens.

Par exemple, je l’utilise lorsque je construis des webapps: une page HTML contient un formulaire avec des filtres disponibles (multiselect), l’utilisateur fait ses choix de filtres, puis une requête Javascript et un backend Python appliquent les filtres avec cette fonction query(), les résultats sont ensuite renvoyés dans la page.

J’ai remarqué qu’au delà d’une trentaine de filtres, les erreurs étaient fréquentes. L’astuce est alors d’utiliser l’égalité avec une liste, qui scale bien mieux!

# not good
df.query(' (column_a == "val1") | (column_a == "val2" ) | ...', inplace=True)

# better!
df.query(' column_a == ["val1", "val2", ...]', inplace=True)