J'ai un fichier CSV avec la lecture des données que je veux lire dans Python. Je reçois des listes contenant des chaînes telles que "2,5"
. Maintenant, faire float("2,5")
ne fonctionne pas, car il a la mauvaise marque décimale.
Comment lire ceci dans Python en tant que 2.5
?
float("2,5".replace(',', '.'))
fera dans la plupart des cas
Si value
est un grand nombre et que .
a été utilisé pour des milliers, vous pouvez:
Remplacez toutes les virgules pour les points: value.replace(",", ".")
Supprimer tout sauf le dernier point: value.replace(".", "", value.count(".") -1)
Vous pouvez le faire en tenant compte des paramètres régionaux:
import locale
# Set to users preferred locale:
locale.setlocale(locale.LC_ALL, '')
# Or a specific locale:
locale.setlocale(locale.LC_NUMERIC, "en_DK.UTF-8")
print locale.atof("3,14")
Lisez this section avant d’utiliser cette méthode.
Pandas soutient cette sortie de la boîte:
df = pd.read_csv(r'data.csv', decimal=',')
Voir http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
en utilisant un regex sera plus fiable
import re
decmark_reg = re.compile('(?<=\d),(?=\d)')
ss = 'abc , 2,5 def ,5,88 or (2,5, 8,12, 8945,3 )'
print ss
print decmark_reg.sub('.',ss)
résultat
abc , 2,5 def ,5,88 or (2,5, 8,12, 8945,3 )
abc , 2.5 def ,5.88 or (2.5, 8.12, 8945.3 )
Si vous souhaitez traiter des cas plus complexes (nombres sans chiffres avant la marque décimale, par exemple), la regex que j'ai conçue pour détecter tous les types de nombres dans le fil suivant peut vous intéresser:
Essayez de remplacer toutes les virgules décimales par des points décimaux:
floatAsStr = "2,5"
floatAsStr = floatAsStr.replace(",", ".");
myFloat = float(floatAsStr)
Bien entendu, la fonction replace
fonctionne sur n’importe quelle sous-chaîne, car python fait désormais la différence entre char et string.
D'abord vous devez vous assurer que les paramètres régionaux ont été utilisés pour fournir le numéro . Si vous ne le faites pas, il y aura sûrement des problèmes aléatoires.
import locale
loc = locale.getlocale() # get and save current locale
# use locale that provided the number;
# example if German locale was used:
locale.setlocale(locale.LC_ALL, 'de_DE')
pythonnumber = locale.atof(value)
locale.setlocale(locale.LC_ALL, loc) # restore saved locale