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?
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP