[programmation python] -prix espace 100n & 1000ers
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
-
Bonjour
pour tes prochains message, merci d'utiliser la coloration syntaxique comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Peux tu poster le fichier d'extraction d'ebay, en choisissant la coloration xml, ainsi que le code qui sépare les colonnes ?
-
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).
-
Bonjour,
Pour la coloration syntaxique, ce n'est pas encore ça ....
prix = '2101,04' prix = prix.replace(',', '.') prix_f = float(prix) -
#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() -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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']) -
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(' ', '')



