J'essaie de One Hot Encode catégories catégorielles dans mon ensemble de données. J'utilise la fonction suivante:

def create_ohe(df, col):
    le = LabelEncoder()
    a = le.fit_transform(df_new[col]).reshape(-1,1)
    ohe = OneHotEncoder(sparse=False)
    column_names = [col + "_" + str(i) for i in le.classes_]
    return (pd.DataFrame(ohe.fit_transform(a), columns=column_names))

J'obtiens MemoryError lorsque j'appelle la fonction dans cette boucle:

for column in categorical_columns:
    temp_df = create_ohe(df_new, column)
    temp = pd.concat([temp, temp_df], axis=1)

Traceback d'erreur:

MemoryError                               Traceback (most recent call last)
<ipython-input-40-9b241e8bf9e6> in <module>
      1 for column in categorical_columns:
----> 2     temp_df = create_ohe(df_new, column)
      3     temp = pd.concat([temp, temp_df], axis=1)
      4 print("\nShape of final df after one hot encoding: ", temp.shape)

<ipython-input-34-1530423fdf06> in create_ohe(df, col)
      8     ohe = OneHotEncoder(sparse=False)
      9     column_names = [col + "_" + str(i) for i in le.classes_]
---> 10     return (pd.DataFrame(ohe.fit_transform(a), columns=column_names))

MemoryError: 
0
Nejmeh Jarjoura 4 nov. 2019 à 01:30

1 réponse

Meilleure réponse

Une erreur de mémoire signifie que votre ordinateur utilise au maximum votre mémoire (RAM) ou que python est au maximum: Erreurs de mémoire et limites de liste?

vous pouvez essayer de diviser la méthode a = le.fit_transform(df_new[col]).reshape(-1,1). Essayez d'exécuter b= le.fit(df_new[col]) afin que vous adaptiez votre encodeur d'étiquettes avec l'ensemble de données complet, puis vous pourriez le fractionner pour ne pas le transformer pour chaque ligne en même temps, cela peut peut-être vous aider. Si b= le.fit(df_new[col]) ne fonctionne pas non plus, vous avez un problème de mémoire, le col que vous devez remplacer par les noms de vos colonnes.

fit_transform est une combinaison de fit et transform.

0
PV8 4 nov. 2019 à 07:01