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

    0
    1. Bonjour,

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

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

            0