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

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

    1. Bonjour,

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

      prix = '2101,04'
      prix = prix.replace(',', '.')
      prix_f = float(prix)
      1. #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()
        1. 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'])
          1. 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(' ', '')