python - integers - convertir la marca decimal
python truncate double to int (5)
Tengo un archivo CSV con lectura de datos que quiero leer en Python. Obtengo listas que contienen cadenas como "2,5"
. Ahora hacer float("2,5")
no funciona, porque tiene la marca decimal incorrecta.
¿Cómo leo esto en Python como 2.5
?
Intenta reemplazar todas las comas decimales con puntos decimales:
floatAsStr = "2,5"
floatAsStr = floatAsStr.replace(",", ".");
myFloat = float(floatAsStr)
La función replace
, por supuesto, funciona en cualquier subcadena, ya que Python ahora distingue entre caracteres y cadenas.
Puede hacerlo de forma localizada:
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")
Lea this sección antes de usar este método.
usar un regex será más confiable
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)
resultado
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 desea tratar casos más complejos (números sin dígitos antes de la marca decimal, por ejemplo), la expresión regular que elaboré para detectar todos los tipos de números en el siguiente hilo puede ser de su interés:
Pandas soporta esto fuera de la caja:
df = pd.read_csv(r''data.csv'', decimal='','')
Ver http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
float("2,5".replace('','', ''.''))
en la mayoría de los casos
Si el value
es un número grande y .
ha sido utilizado por miles, usted puede:
Reemplace todas las comas por puntos: value.replace(",", ".")
Eliminar todos menos el último punto: value.replace(".", "", value.count(".") -1)