es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

TypeError: tipo no hashable: ‘Series’ para pd.get_dummies

Estoy intentando usar pd.get_dummies en algunos de los datos nominales en un dataframe que tengo (House Regression de Kaggle). He separado todas las categorías nominales en una lista de nombres de columnas, 'obj_nominal'.

Cuando llamo a

pd.get_dummies(df, columns=obj_nominal)

Obtengo el error:

TypeError: unhashable type: 'Series'.

La única preprocesamiento que he hecho hasta ahora es eliminar los valores nulos en el conjunto de datos. También he intentado usar OneHotEncoder de Sklearn, y crea el mismo error.

También he intentado crear un dataframe separado usando:

x = df.iloc[:, obj_nominal]

y aplicar get_dummies en el dataframe:

pd.get_dummies(data = x)

pero aún sin suerte…

Los datos se pueden descargar en https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás experimentando un TypeError con la función pd.get_dummies y no estás seguro de cómo proceder. El mensaje de error que estás recibiendo, TypeError: unhashable type: 'Series', sugiere que la función pd.get_dummies no puede aceptar uno de los argumentos que le estás pasando.

    Es posible que uno o más nombres de columna en la lista obj_nominal sean inválidos o estén en un formato inesperado. Puede que quieras verificar que esta lista solo contenga los nombres de las columnas a las que deseas aplicar la codificación, y que estos nombres de columna estén escritos correctamente y no contengan caracteres inesperados.

    Una aproximación que puedes intentar es usar la función pd.Categorical para convertir las columnas categóricas a un tipo de dato categórico antes de aplicar pd.get_dummies. Luego puedes pasar las columnas categóricas directamente a pd.get_dummies. Aquí tienes un ejemplo:

    # Convertir columnas categóricas a tipo de dato categórico
    for col in obj_nominal:
        df[col] = pd.Categorical(df[col])
    
    # Aplicar codificación one-hot a las columnas categóricas
    encoded_cols = pd.get_dummies(df[obj_nominal], prefix=obj_nominal)
    
    # Concatenar las columnas codificadas con el dataframe original
    df_encoded = pd.concat([df.drop(obj_nominal, axis=1), encoded_cols], axis=1)
    

    Alternativamente, puedes intentar especificar el argumento dtype al generar la lista obj_nominal para marcar explícitamente estas columnas como categóricas. Aquí tienes un ejemplo:

    # Especificar los tipos de datos de las columnas como categóricas
    obj_nominal = df.select_dtypes(include='object').columns.tolist()
    
    # Aplicar codificación one-hot a las columnas categóricas
    encoded_cols = pd.get_dummies(df, columns=obj_nominal)
    
    # Concatenar las columnas codificadas con el dataframe original
    df_encoded = pd.concat([df.drop(obj_nominal, axis=1), encoded_cols], axis=1)
    

    Esperemos que una de estas aproximaciones resuelva el TypeError que estás encontrando.

Comments are closed.