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.

Problema al insertar los resultados del vectorizador de conteo en el dataframe.

Tengo un dataframe con forma (4237, 19) y luego otro dataframe con forma (4237, 6), necesito combinar ambos dataframes por columna, por lo que el dataframe resultante debería tener forma (4237, 25), pero obtengo (5524, 25). No puedo entender el problema.

Código que he utilizado.

social_media_vectorizer = CountVectorizer(lowercase=True)

train_social_media_vector = social_media_vectorizer.fit_transform(x_train[“social_media”].values.astype(“U”))
test_social_media_vector = social_media_vectorizer.transform(x_test[“social_media”].values.astype(‘U’))

print(x_train.shape)
print(x_test.shape)

train_social_media_df = pd.DataFrame(train_social_media_vector.todense(), columns=social_media_vectorizer.get_feature_names_out())
test_social_media_df = pd.DataFrame(test_social_media_vector.todense(), columns=social_media_vectorizer.get_feature_names_out())
x_train = pd.concat([x_train, train_social_media_df], axis=1)
x_test = pd.concat([x_test, test_social_media_df], axis=1)

print(“=”*100)
print(x_train.shape)
print(x_test.shape)

print(“=”*100)
print(social_media_vectorizer.vocabulary_)

Resultado

(4237, 19)

(1816, 19)

(5524, 25)

(3058, 25)

{‘facebook’: 0, ‘linkedin’: 2, ‘twitter’: 4, ‘instagram’: 1, ‘youtube’: 5, ‘producthunt’: 3}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que la concatenación de los dataframes está agregando filas adicionales en lugar de combinar las columnas. Esto podría ocurrir si los índices de los dataframes no coinciden antes de la concatenación.

    Para solucionar este problema, puedes intentar restablecer los índices de ambos dataframes antes de concatenarlos:

    train_social_media_df.reset_index(drop=True, inplace=True)
    test_social_media_df.reset_index(drop=True, inplace=True)
    x_train.reset_index(drop=True, inplace=True)
    x_test.reset_index(drop=True, inplace=True)
    
    x_train = pd.concat([x_train, train_social_media_df], axis=1)
    x_test = pd.concat([x_test, test_social_media_df], axis=1)
    
    print("="*100)
    print(x_train.shape)
    print(x_test.shape)
    
    print("="*100)
    print(social_media_vectorizer.vocabulary_)
    

    Esto debería asegurar que los índices de ambos dataframes coincidan antes de la concatenación, y el dataframe resultante debería tener la forma deseada de (4237, 25).

Comments are closed.