Python - Pandas: Convert string decimal to float. Como convertir un string con comas y puntos a float.
Encontré una buena web de datos abiertos de la argentina (http://datar.info/). De ahi saqué un csv de datos de Arsat, pero a la hora de levantar los datos con Pandas, una columna numerica de sueldos era del tipo string. En Argentina, siguiendo la tradición europea, los números decimales se escriben con coma y el punto es utilizado para separar centenas, millares, millones, billlones, etc. Ahora bien, en el mundo de la programación, gracias a la influencia anglosajona, el uso es al revés, puntos para los numeros racionales y comas para separa los miles de los millones. Este mini post es sobre como convertir a float, una columna de string.
Primero creamos una función que se encargué de convertir el tipo de dato string a float, previo borrado de los puntos y reemplazo de las comas por puntos.
def to_float_from_str_decimal(string):
""" It convert '12.540,5' to 125040.50 """
try:
return float(string.replace('.', '').replace(',', '.'))
except:
return string
Segundo, usamos el parametro 'converts' de read_csv de pandas. Este parametro recibe un diccionario donde las claves son los nombres de las columnas que queremos convertir y el value es la función encargada de convertir el tipo de datos.
import pandas as pd
df = pd.read_csv(
'escala_salarial_20170503_3.csv',
delimiter=",",
skip_blank_lines=True,
converters={'nombre_de_columna': to_float_from_strdecimal}
)
También podriamos leer el csv y luego recorrer la columna y convertir la columna con una list-comprehension, pero estariamos girando más de lo necesario; mejor decirle a Pandas que en el momento de la lectura de las lineas, utilice la funcion de python que acabamos de construir!