[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. 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(' ', '')

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

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

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