[programmation python] -prix espace 100n & 1000ers

Raphael -  
 PierrotLeFou -

Bonjour,

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)

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

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

Voici mon code :

#On va creer une fonction prix pour convertir la colonne des prix en float (nombre à virgule), afin de pouvoir faire des calculs et de la data viz.

def filtre_Prix(x) :

#Si l'insight est different d'une string, on garde le texte.
  if type(x) != str :
        return (x)

#Si la longueur du texte est supérieure à 2 caractères, on supprime les centimes d'euros (Si qqn a la fonction arrondi ça m'intéresse aussi :D)
  else :
    if len(x) > 2 :
      txt = x[0:-4]

#Et, on supprime les espaces vides.
      DF['Prix'] = DF['Prix'].str.replace(' ', '')

#Ici on separe le texte avec une virgule et on la transforme en point.

    txt = txt.split(",")
    txt = ".".join(txt)
    try:
      return (float(txt))
    except:
      print(x)

#Et on remplace la colonne tranformée par l'ancienne.

DF['Prix_clean'] = DF['Prix'].map(filtre_Prix)

print(DF['Prix_clean'])

# DF.info()

Merci par avance pour votre aide.


Macintosh / Chrome 113.0.0.0

6 réponses

  1. Raphael
     

    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)

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

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

    Voici mon code :

    #On va creer une fonction prix pour convertir la colonne des prix en float (nombre à virgule), afin de pouvoir faire des calculs et de la data viz.
    
    def filtre_Prix(x) :
    
    #Si l'insight est different d'une string, on garde le texte.
      if type(x) != str :
            return (x)
    
    #Si la longueur du texte est supérieure à 2 caractères, on supprime les centimes d'euros (Si qqn a la fonction arrondi ça m'intéresse aussi :D)
      else :
        if len(x) > 2 :
          txt = x[0:-4]
    
    #Et, on supprime les espaces vides.
          DF['Prix'] = DF['Prix'].str.replace(' ', '')
    
    #Ici on separe le texte avec une virgule et on la transforme en point.
    
        txt = txt.split(",")
        txt = ".".join(txt)
        try:
          return (float(txt))
        except:
          print(x)
    
    #Et on remplace la colonne tranformée par l'ancienne.
    
    DF['Prix_clean'] = DF['Prix'].map(filtre_Prix)
    
    print(DF['Prix_clean'])
    
    # DF.info()

    Merci pour votre aide :)

    P:S. : Pour ce qui est du fichier je ne vois pas où je peux le poster (le post ne supporte pas le poids du fichier).

    0
  2. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    Bonjour,

    Pour la coloration syntaxique, ce n'est pas encore ça ....

    prix = '2101,04'
    prix = prix.replace(',', '.')
    prix_f = float(prix)
    0
  3. Raphael
     
    #On va creer une fonction prix pour convertir la colonne des prix en float (nombre à virgule), afin de pouvoir faire des calculs et de la data viz.
    
    def filtre_Prix(x) :
    
    #Si l'insight est different d'une string, on garde le texte.
      if type(x) != str :
            return (x)
    
    #Si la longueur du texte est supérieure à 2 caractères, on supprime les centimes d'euros (Si qqn a la fonction arrondi ça m'intéresse aussi :D)
      else :
        if len(x) > 2 :
          txt = x[0:-4]
    
    #Et, on supprime les espaces vides.
          DF['Prix'] = DF['Prix'].str.replace(' ', '')
    
    #Ici on separe le texte avec une virgule et on la transforme en point.
    
        txt = txt.split(",")
        txt = ".".join(txt)
        try:
          return (float(txt))
        except:
          print(x)
    
    #Et on remplace la colonne tranformée par l'ancienne.
    
    DF['Prix_clean'] = DF['Prix'].map(filtre_Prix)
    
    print(DF['Prix_clean'])
    
    # DF.info()
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    def filtre_Prix(x):
        x = x.replace(",", ".")
        x = x.replace(" ", "")
        x = float(x)
        return(x)
    
    DF['Prix_clean'] = DF['Prix'].map(filtre_Prix)
    print(DF['Prix_clean'])
    0
  6. PierrotLeFou
     

    Sur la ligne suivante, tu fais également sauter les unités: "123,45" -> "12"
          txt = x[0:-4]
    Remplaces le -4 par -3
    On peut mettre les deux replace à la suite:
    txt = txt.replace(',', '.').replace(' ', '')

    0