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 :

[Aide problématique python] - Supprimer un espace, object to float64


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2023
    Messages : 3
    Par défaut [Aide problématique python] - Supprimer un espace, object to float64
    Bonjour,

    Ceci est mon premier message sur ce forum.

    Je débute en python et je suis bloqué depuis plusieurs jours sur cette problématique.

    J'aimerais, à partir d'une extraction ebay, convertir ma colonne Prix en float tout en gardant les valeurs supérieures à 999,99EUR (Cf. Photos)

    Nom : Capture d’écran 2023-06-01 à 13.09.34.png
Affichages : 258
Taille : 47,6 Ko

    Le problème est que les valeurs supérieures à 999,99EUR s'affichent en Nan.(Cf. photos)

    Nom : Capture d’écran 2023-06-01 à 13.10.34.png
Affichages : 236
Taille : 45,5 Ko

    J'ai essayé les replace(), split()....mais rien ne marche.

    Voici mon code :

    Nom : Capture d’écran 2023-06-01 à 18.24.14.png
Affichages : 503
Taille : 541,6 Ko

    Merci par avance pour votre aide.
    Images attachées Images attachées   

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Raphael_17 Voir le message
    Ceci est mon premier message sur ce forum.
    Et tu n'es pas allé voir les autres topics? Comment font les gens pour y poster leurs codes? Ou alors ne serait-ce qu'être allé lire les règles?
    Tu as lu ton post une fois celui-ci écrit? Tu trouves que ton code est lisible/utlisable?? Tu crois quoi? Que parce qu'on est des pros Python on saura replacer d'instinct les tabulations qui manquent???
    La seule chose que je peux en tirer, c'est que tu fais un try pour retourner float(x) (et pas besoin de parenthèses au return) mais si ça échoue(et dans ce cas on gère de quelle exception il s'agit) tu ne retournes rien. Donc tu as une fonction qui peut tantôt retourner un float, tantôt retourner None. Pas facile pour l'appelant de faire alors la part des choses...

    Citation Envoyé par Raphael_17 Voir le message
    (Si qqn a la fonction arrondi ça m'intéresse aussi )
    round()

    Citation Envoyé par Raphael_17 Voir le message
    #Ici on separe le texte avec une virgule et on la transforme en point.
    replace()

    Citation Envoyé par Raphael_17 Voir le message
    if type(x) != str
    if not isinstance(x, str)..

    Citation Envoyé par Raphael_17 Voir le message
    je suis bloqué depuis plusieurs jours ...
    M'étonnerait franchement que tu y aies vraiment passé plusieurs jours dessus. Que ce soit dans les tiroirs depuis plusieurs jours pendant que tu jouais à CoD ok mais "bloquer" dessus pendant plusieurs jours...
    On ne peut pas bloquer sur un truc pareil. Au pire on fait ça étape par étape (d'abord remplacer la virgule par un point, ça marche, ensuite supprimer l'espace, ça marche, ensuite convertir en float, ça marche, ensuite... ben ensuite on a fini et on n'y a passé qu'une vingtaine de minutes!!!)
    print(tuple(map(lambda n: float(n.replace(" ", "").replace(",", ".")), ("33,61", "10,07", "5 456,22"))))...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2023
    Messages : 3
    Par défaut
    Bonjour Sve@r.

    Merci pour votre message


    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Et tu n'es pas allé voir les autres topics? Comment font les gens pour y poster leurs codes? Ou alors ne serait-ce qu'être allé lire les règles?
    Tu as lu ton post une fois celui-ci écrit? Tu trouves que ton code est lisible/utlisable?? Tu crois quoi? Que parce qu'on est des pros Python on saura replacer d'instinct les tabulations qui manquent???
    En effet, je n'ai pas pris le temps de lire les règles car j'ai posté dans la précipitation en espérant désespérément (quelle contradiction) que vous m'apportiez la réponse rapidement...
    Je vais faire en sorte de repasser sur mon poste afin qu'il soit plus clair


    [/QUOTE]
    La seule chose que je peux en tirer, c'est que tu fais un try pour retourner float(x) (et pas besoin de parenthèses au return) mais si ça échoue(et dans ce cas on gère de quelle exception il s'agit) tu ne retournes rien. Donc tu as une fonction qui peut tantôt retourner un float, tantôt retourner None. Pas facile pour l'appelant de faire alors la part des choses...[/QUOTE]

    Je n'ai pas bien compris cette phrase. Comme évoqué je débute.
    Mon projet est assez simple et je pense avoir fait le plus difficile. Malheureusement sans la valeur des prix au propre, je ne pourrais rien faire d'intéressant.
    Que représentent les "C" dans return) ?
    "if not isinstance(x, str).." pareil pour celui-ci...


    >>round()


    replace() >> Ça ne marche pas...


    [/QUOTE]M'étonnerait franchement que tu y aies vraiment passé plusieurs jours dessus. Que ce soit dans les tiroirs depuis plusieurs jours pendant que tu jouais à CoD ok mais "bloquer" dessus pendant plusieurs jours...
    On ne peut pas bloquer sur un truc pareil. Au pire on fait ça étape par étape (d'abord remplacer la virgule par un point, ça marche, ensuite supprimer l'espace, ça marche, ensuite convertir en float, ça marche, ensuite... ben ensuite on a fini et on n'y a passé qu'une vingtaine de minutes!!!)
    print(tuple(map(lambda n: float(n.replace(" ", "").replace(",", ".")), ("33,61", "10,07", "5 456,22"))))...[/QUOTE]

    Et pourtant...Je me suis pris un mois à Bali, pour avancer dans mes projets perso.
    Pas de play, pas d'amis, pas de copine...que du code (je vais pas faire ça tout le mois j'espère)
    Non.
    J'ai un projet sur lequel j'aimerais revenir, commencé il y a bien longtemps en effet, à partir d'une extraction ebay avec Octoparse.
    Et malheureusement on peut bloquer sur un truc pareil..
    J'ai commencé il y a 10 jours. Grâce au contenu sur youtube j'ai réussi à automatiser l'extraction des données ebay qui m'intéressent.
    J'ai complété mon code en analyse de donné et j'ai tout nettoyé...à part cela.
    C'est le dernier truc qui me bloque..
    Je peux comprendre que ça parait simple.
    Mais comme je suis débutant et que je commençait à m'énerver derrière mon bureau, je me suis dit qui fallait pas que j'y passe plus de temps et que je demande de l'aide.
    P.S: J'y ait passé exactement 6H dessus CE problème particulier sans trouver la solution..Donc vous vous doutez bien que si je fais ce poste c'est que j'ai besoin d'aide

  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
    Citation Envoyé par Raphael_17 Voir le message
    Grâce au contenu sur youtube
    ...
    P.S: J'y ait passé exactement 6H dessus CE problème particulier sans trouver la solution
    Citation Envoyé par Raphael_17 Voir le message
    Et non malheureusement...Si ça pouvait être si simple
    C'est justement très simple : tu as perdu 6 heures de ton temps

    - Youtube n'est clairement pas top : préférer les tutos écrits ! Et faire des mini exercices.
    - Si tu avais fait 6 heures de tutos : tu n'aurais pas perdu de temps et tu pouvais résoudre facilement ce problème en moins de 6 minutes (et les autres problèmes simples qui vont arriver...)
    - pour nous qui connaissons bien python : c'est 6 secondes de réflexion pour ton problème

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Raphael_17 Voir le message
    Je n'ai pas bien compris cette phrase. Comme évoqué je débute.
    Débuter n'est pas une excuse. On a tous été débutant. Il y a des tutos qui expliquent ce qu'est une fonction, comment elle doit bosser. Si une fonction retourne tantôt un float tantôt un None, celui qui va l'utiliser il fait quoi?
    T'as fait un peu des maths au lycée. Quand on te disait "la fonction f(x) retourne x²" tu sais ce que ça signifie. Imagine un prof qui te dise "la fonction f(x) retourne parfois x² et parfois rien du tout et on ne sait pas trop quand, tracez sa courbe et démerdez-vous" tu lui dis quoi à ce prof?
    Ben c'est exactement ce que tu demandes à Python. De pouvoir gérer de la même façon des float et des "rien".

    Citation Envoyé par Raphael_17 Voir le message
    Que représentent les "C" dans return) ?
    Mise en page d'un code sur le forum => il ressort à l'écran et on peut mieux le voir

    Citation Envoyé par Raphael_17 Voir le message
    "if not isinstance(x, str).." pareil pour celui-ci...
    On ne vérifie pas les type avec une instruction "est-ce que ce truc est bien de ce type" car ça ne gère pas l'héritage => si tu as un truc qui "hérite" d'un str, ça garde les propriétés et les avantages du str mais le type n'est pas à proprement parlé "str" => le test renvoie faux.
    Or si on fait ce genre de test, sauf cas très particuliers on ne cherche pas réellement un pur "str". On cherche si le truc a les propriétés d'un str. Parce que que le truc soit "str" ou "toto" en réalité on s'en balance tant qu'il nous apporte les avantages du str.
    La fonction isinstance() permet de vérifier si le truc a les propriétés du type demandé (en résumé elle répond "ok" si le truc est str ou hérite d'un str). Ca marche à minima pareil que tester directement le type mais en plus ça marche aussi si le truc est un "str" évolué. Donc si ça marche pareil tu peux l'utiliser à la place Et si ça marche mieux ça n'en sera que mieux.

    Citation Envoyé par Raphael_17 Voir le message
    replace() >> Ça ne marche pas...
    As-tu remarqué mon exemple qui marche? L'as-tu seulement copié/collé/testé?
    A un moment donné il faut aussi te remettre en question. Si chez-moi ça marche et pas chez-toi, que peut-on en conclure ? Que ça vient de nos Pythons respectifs? de nos ordinateurs?? ou de ceux qui sont devant???

    Citation Envoyé par Raphael_17 Voir le message
    Et pourtant...Je me suis pris un mois à Bali, pour avancer dans mes projets perso.
    A Bali ben oui, classique. Il y en a, pour leurs projets perso ils s'enferment dans des caves ou des garages en banlieues pluvieuses et moisies, et d'autres ils vont au soleil de Bali. Mais pas de souci, dans les deux cas c'est pour bosser...

    Citation Envoyé par Raphael_17 Voir le message
    (je vais pas faire ça tout le mois j'espère)
    Ben non, ce serait dommage de s'enterrer tout un mois à Bali... Vivement le retour qu'on puisse respirer un peu...

    Citation Envoyé par Raphael_17 Voir le message
    J'ai commencé il y a 10 jours. Grâce au contenu sur youtube j'ai réussi à automatiser l'extraction des données ebay qui m'intéressent.
    Ouaip. Bref tu n'as pas cherché à "apprendre" Python, juste à "trouver" des solutions magiques à des soucis précis. Si demain tu as un autre souci, même similaire, tu sera tout aussi bloqué parce que tu n'auras pas appris les bases du langage et la façon de décomposer un problème.
    youtube c'est pas un support adapté à l'apprentissage. On subit la vidéo, on n'y participe pas. Une vidéo qui n'est pas forcément calée sur la vitesse d'apprentissage de l'apprenant (en fait elle ne l'est même jamais).
    Pour apprendre un langage, on prend un livre et on l'ouvre à la première page et on le lit. Et on tape les exemples et on les étudie. C'est ce que j'ai fait, c'est ce que papajoker a fait, c'est ce que wiztricks a fait (oui, même wiztricks, ce général 6 étoiles aux 20000 messages qui nous épate à chaque fois qu'il nous amène un code, lui aussi il a été débutant un jour il y a bien bien bien longtemps).
    Et c'est ce que nous ferons encore si on doit apprendre un nouveau langage demain.
    Et (chance) il y a des tas de tutos gratuits sur le net (dont un dans ma signature).


    Citation Envoyé par Raphael_17 Voir le message
    C'est le dernier truc qui me bloque..
    Dernier truc avant le prochain...

    Citation Envoyé par Raphael_17 Voir le message
    P.S: J'y ait passé exactement 6H dessus CE problème particulier sans trouver la solution..Donc vous vous doutez bien que si je fais ce poste c'est que j'ai besoin d'aide
    Déjà 6h c'est pas "plusieurs jours". Ceci dit moi j'y ai passé exactement 6mn pour te sortir un truc qui fonctionne et qui fait ce que tu veux. Et papajoker a dû y passer à peu près autant de temps pour te sortir un autre truc qui fonctionne différemment mais qui fait aussi ce que tu veux. Que te faut-il de plus??? Tu n'as plus qu'à étudier ces deux exemples pour en extraire le coeur et l'intégrer dans ton code. Etudier c'est le décomposer (que fait cette instruction? et celle-là?? et cette autre???) etc.
    Et on parle de "post", pas de "poste".

    Citation Envoyé par papajoker Voir le message
    - pour nous qui connaissons bien python : c'est 6 secondes de réflexion pour ton problème
    J'ai pas voulu l'humilier trop, moi j'ai dit "6 minutes"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    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 Raphael_17 Voir le message
    Le problème est que les valeurs supérieures à 999,99EUR s'affichent en Nan.(Cf. photos)
    A la base, c'est la suppression des blancs/espace qui foire (dans votre code).
    Et le NaN est parce que votre fonction retourne None (et affiche) le x qui n'a pu être convertit.

    Et si vous pataugez à coder des trucs aussi simples, c'est parce que vous avez négligé de passer du temps dans les tutos: c'est votre choix, supportez en les conséquences.

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

  7. #7
    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

    c'est la suppression des blancs/espace qui foire
    Note : avec python, on peut aussi remplacer ces espaces par le caractère _ : 1 200 == 1_200

    Pour la virgule/point, parfois, on peut aussi utiliser la locale (fr)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import locale
    locale.setlocale(locale.LC_ALL, 'fr_FR.utf-8')
     
    print([int(locale.atof(x.replace(" ", "_"))) for x in ("4 780,5", "1 441 874.77", "0.4")])

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2023
    Messages : 3
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    A la base, c'est la suppression des blancs/espace qui foire (dans votre code).
    Et le NaN est parce que votre fonction retourne None (et affiche) le x qui n'a pu être convertit.

    Et si vous pataugez à coder des trucs aussi simple c'est parce que vous avez négligé de passer du temps dans les tutos: c'est votre choix, supportez en les conséquences.

    - W
    Et non malheureusement...Si ça pouvait être si simple

  9. #9
    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 Raphael_17 Voir le message
    Et non malheureusement...Si ça pouvait être si simple
    Si vous partiez à apprendre à programmer plutôt qu'à vouloir réaliser un code où vous ne comprenez pas grand chose, vous pourriez avoir des objectifs plus atteignables et ce serait plus simple de progresser pas à pas.

    Là vous êtes parti à utiliser pandas sans savoir qu'il sait gérer des chaines de caractères représentant des nombres flottants où la virgule sépare la partie décimale et l'espace les milliers: vous écrivez un code parce que vous ne savez pas utiliser l'outil que vous avez choisi (vous auriez pu faire sans pandas... et normalement le faire en ayant pris le temps d'apprendre les bases en passant du temps dans un tuto).

    Citation Envoyé par Raphael_17
    Et pourtant...Je me suis pris un mois à Bali, pour avancer dans mes projets perso.
    Et la facture en CO² de vos élucubrations? Vous avez des moyens financiers.
    Ici c'est gratuit, mais on ne vous donne rien.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 9
    Dernier message: 27/10/2005, 13h20
  3. [DEBUTANT]Supprimer les espaces pour une requete
    Par tripper.dim dans le forum Oracle
    Réponses: 4
    Dernier message: 12/10/2005, 16h04
  4. Supprimer les espaces
    Par jmde dans le forum Access
    Réponses: 16
    Dernier message: 24/09/2005, 22h40
  5. Supprimer les espaces des noms de fichier
    Par Cathy dans le forum Linux
    Réponses: 20
    Dernier message: 04/08/2005, 17h13

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