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

Python Discussion :

Problème text cleaning


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut Problème text cleaning
    Bonjour à toutes et tous,

    Je découvre progressivement python et essaye de m'entrainer en le mettant en application mais je bloque sur un élément du code que j'écris me renvoyant toujours une erreur.

    Mon objectif : je souhaite partir de ce texte et l'importer dans un dataframe python et indiquer à python que pour chaque ligne débutant par une minuscule, je souhaite ajouter le texte à la ligne précédente et supprimer la ligne.

    Texte de travail :
    Narration: Mon début de texte.
    suite du texte
    ça continue
    encore et toujours
    c'est la fin

    Nouvelle narration : etc

    En l'important dans python, aucun souci, le df créé bien une ligne par ligne du texte. Par contre au moment de la jointure aie aie aie

    Ce que je voudrais avoir c'est :

    0 Narration : Mon début de texte. suite du texte ça continue encore et toujours c'est la fin
    1 Nouvelle narration : etc


    Voici le code que j'essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in text_brut.index:
        if text_brut.iloc[i,0][0].islower():
            text_brut.iloc[(i-1),0] = text_brut.iloc[(i-1),0] + " " + text_brut.iloc[i,0]
    cela fonctionne mais cela me donne ce rendu :
    0 Narration : Mon début de texte. suite du texte
    1 suite du texte ça continue
    2 ça continue encore et toujours
    3 encore et toujours c'est la fin
    4 Nouvelle narration : etc


    Aussi je me dis qu'il faudrait supprimer la ligne qui vient d'être ajoutée à la précédente mais je n'arrive pas à comprendre la méthode drop. Ce code-ci ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i in text_brut.index:
        if text_brut.iloc[i,0][0].islower():
            text_brut.iloc[(i-1),0] = text_brut.iloc[(i-1),0] + " " + text_brut.iloc[i,0]
        text_brut.drop(text_brut.iloc[i,0].index, inplace=True)
    Le message d'erreur :
    index 1 is out of bounds for axis 0 with size 0
    Auriez-vous une idée d'une manière de faire ?

    Merci et belle journée !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par lohofora Voir le message
    Auriez-vous une idée d'une manière de faire ?
    Si vous débutez avec Python, une liste de listes serait bien plus abordable que des dataframes pandas... et trouver un tuto dans lequel il y a des exercices corrigés plutôt que d'inventer des challenges où sans aucune idée sur les concepts à maîtriser pour avoir une chance de les résoudre sans demander de l'aide...

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

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Si vous débutez avec Python, une liste de listes serait bien plus abordable que des dataframes pandas... et trouver un tuto dans lequel il y a des exercices corrigés plutôt que d'inventer des challenges où sans aucune idée sur les concepts à maîtriser pour avoir une chance de les résoudre sans demander de l'aide...

    - W
    Bonjour Wiztricks,

    Merci pour votre lecture et votre réponse constructive . Je n'ai pas inventé le challenge, il s'agit d'une problématique régulièrement rencontrée quand on fait du data cleaning, je l'ai juste simplifiée parce que je débute sur les df.

    Belle journée !

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    ok, c'est pour faire du ménage après une mauvaise importation (faite par un autre bien sûr)
    Ce qui me parait le plus simple c'est de plutôt de créer une df_propre

    Dans la boucle, une chose de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        if not lower():
            if agrégé:
                propre.add (agrégé)   # pas top mais, 1 ajout contre 4 drop() ?
            agrégé = ''
        agrégé += " "+df[i,0]
    # voir si il reste quelque chose dans "agrégé" a la fin de la boucle...
    # Le mieux : propre est un tableau python que l'on va transformer en df à la fin

    ps: truc + " " + machin (ou mon speudo code) c'est pas top en vitesse on doit éviter dans une boucle



    text_brut.drop(text_brut.iloc[i,0].index, inplace=True)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ...islower()::  # ton code n'a pas de sens si pas dans block if
        text_brut.drop(i, inplace=True)

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par lohofora Voir le message
    il s'agit d'une problématique régulièrement rencontrée quand on fait du data cleaning, je l'ai juste simplifiée parce que je débute sur les df.
    Il est plus simple de nettoyer les données avant d'en faire un dataframe plutôt qu'après (sauf à créer un nouveau df).
    Mais la logique est la même avec des listes de listes.

    Pour ce qui est de la méthode .drop, vous avez une documentation à lire, des tas d'exemples à consulter sur Internet... et si vous voulez un truc plus convivial, le baratineur ChatGPT est pour vous.


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

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut
    Merci beaucoup pour vos aides. Effectivement l'action la plus avisée était de cleaner avant d'importer

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par lohofora Voir le message
    Effectivement l'action la plus avisée était de cleaner avant d'importer
    Ce qui fait que lorsqu'on débute en programmation, on suit des idées parfois farfelues (mais parfois aussi intéressantes) qu'on ne va pas suivre juste parce que...

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

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Dommage que tu ne nous dise pas ce que tu as en fait fait ...
    Citation Envoyé par lohofora Voir le message
    Effectivement l'action la plus avisée était de cleaner avant d'importer
    Je ne vais pas suive les autres, pour moi NON !

    Dans tous les cas il faut importer les datas, simplement ce qui change c'est la façon de les importer !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    On importe ...
       on boucle
         on transforme/ajoute dans nouvelle table
    Que la boucle soit une lecture ligne à ligne d'un fichier csv, une boucle sur un dataframe ou le résultat d'une requete sql ne change strictement rien.

    De plus le data-cleaning c'est surtout l'art de ne rien casser !!!! Et malheureusement il n'y a rien dans ton code donc tu n'as fait que mumuse avec pandas.
    Une majuscule peut toujours exister au milieu d'une phrase (et se retrouver ici au début d'un champ), donc le minimum est de tester le dernier caractère de la phrase précédente et si il y a doute, créer un fichier log. Et il y a certainement d'autres tests à faire sur la table résultante qui n'est encore que temporaire. Pour moi, le vrai travail est ici (dans la validation de la nouvelle table)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème : texte ou numérique ?
    Par mouaa dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/06/2007, 09h00
  2. [CR XI] Problème texte légende
    Par anneso108 dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 02/02/2007, 10h29
  3. Réponses: 2
    Dernier message: 14/12/2006, 07h54
  4. Probléme Texte 3D
    Par denebj dans le forum OpenGL
    Réponses: 7
    Dernier message: 07/12/2006, 21h45
  5. [VB5] problème text box
    Par moi214 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 31/05/2006, 22h56

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