J'ai créé une trame de données à partir d'une sortie JSON qui ressemble à ceci:
Total Revenue Average Revenue Purchase count Rate
Date
Monday 1,304.40 CA$ 20.07 CA$ 2,345 1.54 %
La valeur stockée est reçue sous forme de chaîne à partir du JSON. J'essaie de:
1) Supprimez tous les caractères de l'entrée (ex: $ CA ou%) 2) convertissez les colonnes de taux et de revenus en flottant 3) Convertissez les colonnes de comptage en int
J'ai essayé de faire ce qui suit:
df[column] = (df[column].str.split()).apply(lambda x: float(x[0]))
Cela fonctionne bien sauf lorsque j'ai une valeur avec un coma (ex: 1 465 ne fonctionnera pas alors que 143 le ferait).
J'ai essayé d'utiliser plusieurs fonctions pour remplacer le "," par "", etc. Rien n'a fonctionné jusqu'à présent. Je reçois toujours l'erreur suivante:
ValueError: impossible de convertir la chaîne en float: '1,304.40'
Ces chaînes ont des virgules comme milliers de séparateurs, vous devrez donc les supprimer avant l'appel à float
:
df[column] = (df[column].str.split()).apply(lambda x: float(x[0].replace(',', '')))
Cela peut être un peu simplifié en déplaçant split
à l'intérieur de lambda
:
df[column] = df[column].apply(lambda x: float(x.split()[0].replace(',', '')))
Une autre solution avec list
compréhension, si besoin applique string
fonctions fonctionnant uniquement avec Series
(colonnes de DataFrame
) comme - str.split
et str.replace
:
df = pd.concat([df[col].str.split()
.str[0]
.str.replace(',','').astype(float) for col in df], axis=1)
#if need convert column Purchase count to int
df['Purchase count'] = df['Purchase count'].astype(int)
print (df)
Total Revenue Average Revenue Purchase count Rate
Date
Monday 1304.4 20.07 2345 1.54