IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

DataFrame str.contains


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Par défaut DataFrame str.contains
    Bonjour,

    1ers pas en python et je galère beaucoup...
    J'ai exporte un File.csv avec près de 800k lignes et 70 colonnes
    Voici mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import pandas as pd
    import numpy as np
    data = pd.read_csv("File.csv")
     
    List1 = ['A', 'B', 'C', 'D', 'E']
    data1 = data[(data['Column3 '].isin(List1))]
    ## Je garde toutes les lignes dont la Column3 est identique aux items de List1 (a savoir A, B...ou E) 
     
    ## Sur cette df data1, je veux ensuite appliquer un filtre pour supprimer toutes les lignes dont la ColumnV contiendrait
    ## le texte Impossible, Possible et/ou Hypothese
     
    data2 = data1[~data1['ColumnV'].str.contains("Impossible")] 
    data3 = data2[~data2['ColumnV'].str.contains( "Possible")]
    data4 = data3[~data3['ColumnV'].str.contains( "Hypothese")]
    Jusqu'ici tout va bien malgré la lourdeur du code...

    Sachant que je veux supprimer énormément de lignes avec de nombreux mots non pertinents pour le problème, j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List2=["Impossible", "Possible", "Hypothese"]
    data2 = data1[~data1['ColumnV'].str.contains(List2)]
    Message d'erreur...Comment pourrais-je condenser mon code avec tous les mots (Impossible, Possible...) qui ne me plaisent pas regrouper?

    Merci de vos conseils

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 677
    Par défaut
    Salut,

    Citation Envoyé par Fr3ako Voir le message
    Comment pourrais-je condenser mon code avec tous les mots (Impossible, Possible...) qui ne me plaisent pas regrouper?
    L'idée d'utiliser str.contains n'est pas mauvaise mais il faudrait avoir le réflexe d'ouvrir la documentation pour voir ce qu'on peut faire avec.
    On y verra qu'on peut lui passer une expression régulière (pour le "comment", voir les exemples). Ce qui pourrait faire le boulot.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Par défaut
    Salut Wiz,

    Merci pour ton retour.
    Oui on peut lui passer une expression reguliere mais ma ColumnV est remplie de commentaires differents.
    Le principe serait que des qu'un mot interdit de ma Liste2 est detecte a l'interieure de cette cellule, toute la ligne soit supprimee...

    Ca marche bien si j'ecris une ligne de code pour chaque mot interdit mais je ne comprends pas pourquoi il ne peut pas accepter plusieurs strings a la fois.

    J'ai essaye avec ~isin() mais il demande le string exacte et les commentaires sont trop longs et trop nombreux pour les inserer dans une liste.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Par défaut
    Je crois que j'ai trouvé en utilisant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    searchfor=["Impossible", "Possible", "Hypothese"]
    data2 = data1[~data1['ColumnV'].str.contains('|'.join(searchfor))]
    Je pense qu'il va chercher OU Impossible OU Possible OU Hypothèse et m'effacer la ligne si détectée.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 677
    Par défaut
    Citation Envoyé par Fr3ako Voir le message
    Je pense qu'il va chercher OU Impossible OU Possible OU Hypothese et m'effacer la ligne si detectee.
    Pourquoi "penser", c'est le sens de cette expression régulière et la documentation donne un exemple avec s1.str.contains('house|dog', regex=True).

    Le seul boulot est de vérifier que çà fait bien ce qu'on a compris que çà doit faire (ce qui est le travail de lecture technique d'une documentation... même lorsque çà dit appuyer sur le bouton avec le label B3 sur la figure 3, on regarde la photo, on compare avec la machine pour voir si on trouve B3 puis on appuie dessus pour voir si çà fait ce que çà dit).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Par défaut
    Wiz,

    Ce n'est pas parce que je debute en Python et que j'essaye de trouver mes marques avec ce nouveau langage (meme sans tout comprendre a la doc) que la post-analyse et confirmation ne sera pas faite derriere, je n'en suis pas a mon 1er rodeo...

    Merci a toi

Discussions similaires

  1. Probleme débutant Str/bytes
    Par TueurDeMouches dans le forum Général Python
    Réponses: 8
    Dernier message: 15/02/2014, 18h50
  2. Probleme avec le Contains
    Par nouvelinscrit dans le forum C#
    Réponses: 8
    Dernier message: 12/07/2010, 16h43
  3. Création d'un mot probleme avec "str"
    Par Cedricphilibert dans le forum Général Python
    Réponses: 4
    Dernier message: 15/03/2010, 14h22
  4. Problem avec methode contains.
    Par ox@na dans le forum Langage
    Réponses: 7
    Dernier message: 23/02/2008, 20h31
  5. [Free Pascal] Problème avec 'str'
    Par TheBigMac dans le forum Free Pascal
    Réponses: 1
    Dernier message: 12/04/2006, 21h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo