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

Fermé
Raphael - 1 juin 2023 à 07:12
 PierrotLeFou - 1 juin 2023 à 18:56

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

A voir également:

6 réponses

Utilisateur anonyme
1 juin 2023 à 08:11

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 ?


0

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
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 1 juin 2023 à 11:16

Bonjour,

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

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 1 juin 2023 à 13:28
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
PierrotLeFou
1 juin 2023 à 18:56

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