web-dev-qa-db-fra.com

Utilisation de str.contains () dans pandas avec des cadres de données

Je me demande s'il existe un moyen plus efficace d'utiliser la fonction str.contains () dans Pandas, pour rechercher deux chaînes partielles à la fois. Je souhaite rechercher dans une colonne donnée dans une trame de données des données contenant "nt" ou "nv". En ce moment, mon code ressemble à ceci:

    df[df['Behavior'].str.contains("nt", na=False)]
    df[df['Behavior'].str.contains("nv", na=False)]

Et puis j'ajoute un résultat à un autre. Ce que je voudrais faire, c'est utiliser une seule ligne de code pour rechercher toutes les données qui incluent "nt" OR "nv" OR "nf. "J'ai essayé différentes méthodes qui, selon moi, devraient fonctionner, y compris le simple fait de coller un tuyau entre les termes, mais tout cela entraîne des erreurs. J'ai vérifié la documentation, mais je ne vois pas cela comme une option. Je obtenir des erreurs comme celle-ci:

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-113-1d11e906812c> in <module>()
    3 
    4 
    ----> 5 soctol = f_recs[f_recs['Behavior'].str.contains("nt"|"nv", na=False)]
    6 soctol

    TypeError: unsupported operand type(s) for |: 'str' and 'str'

Existe-t-il un moyen rapide de le faire? Merci pour toute aide, je suis un débutant mais j'AIME pandas pour la lutte des données.

27
M.A.Kline

Est une expression régulière et doit être dans une chaîne:

"nt|nv"  # rather than "nt" | " nv"
f_recs[f_recs['Behavior'].str.contains("nt|nv", na=False)]

Python ne vous permet pas d'utiliser le ou (|) opérateur sur les chaînes:

In [1]: "nt" | "nv"
TypeError: unsupported operand type(s) for |: 'str' and 'str'
47
Andy Hayden