TransWikia.com

Convertir Columna EDAD de tipo object a INT

Stack Overflow en español Asked on December 23, 2021

Estoy trabajando en Jupyter, al leer un archivo .CSV con varias columnas, de las cuales necesito transformar la columna "EDAD" a INT para poder realizar algoritmos de machine learning. El problema es que como pueden observar los datos varían entre '78','0.666','70-70','0.5','44000','50.0','10+','5 months'.

Se me ocurre otra solución en la cual eliminar todos los datos que no tengan este formato de edad "xx" puesto que el dataset tiene mas de 3 millones de registros, espero me puedan ayudar con las dos dudas y poder solucionar este problema

Dejare el error que me dio el jupyter igualmente:

int() argument must be a string, a bytes-like object or a number, not 'pandas._libs.interval.Interval'

¿Cómo puedo convertir columnas a números enteros?

Los distintos datos de la columna EDAD

2 Answers

Primero necesito una función que retorne el valor entero de cualquier string conteniendo un valor numérico, ya sea entero o flotante.

La función to_int recibe un string y trata de convertirlo usando float (para casos como 40.5) y luego int. Si parámetro recibido no es convertible, se genera una excepción y se retorna un string vacio.

def to_int(val):
    """ Reconoce valores numericos y los transforma a enteros.
    """
    try:
        value = int(float(val))
    except ValueError:
        value = ""
    return value

Ahora sólo resta aplicar esa función a cada elemento de la columna. Para esos usamos map, que aplica la función indicada a todos los elementos del dataframe/columna/fila que indiques:

df["Edad"] = df["Edad"].map(to_int)

El proceso completo se ejemplifica aqui:

import numpy as np
import pandas as pd

def to_int(val):
    """ Reconoce valores numericos y los transforma a enteros.
    """
    try:
        value = int(float(val))
    except ValueError:
        value = ""
    return value

values = [np.NaN, "10", "10-20", "6 weeks", "40.5"]
df =pd.DataFrame(values, columns=["Edad"])

print(df)
df["Edad"] = df["Edad"].map(to_int)
print(df)

produce:

      Edad
0      NaN
1       10
2    10-20
3  6 weeks
4     40.5
  Edad
0     
1   10
2     
3     
4   40

Answered by Candid Moe on December 23, 2021

Seguramente deberías limpiar los datos que no siguen el formato de edad.

Luego de la limpieza, proba el siguiente código:

>>> df['EDAD'].astype(str).astype(int)

Pasas primero a string y luego a entero.

También borra los valores NaN.

Answered by pablonicolasr on December 23, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP