Python - Pandas: Convert string decimal to float. Como convertir un string con comas y puntos a float.

16/07/2017 | Autor: Eduardo Enriquez

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!

 


Tags