J'ai un DataFrame avec quelques fonctionnalités de texte, c'est-à-dire une fonctionnalité appelée "job" avec une occurrence telle que 'policeman', 'Lawyer', 'doctor' etc. Comme dans le code Python suivant:

    import pandas as pd
    dict = {'age' : [19, 35, 47], 'job' : ['policeman', 'lawyer', 'doctor']}
    df = pd.DataFrame(dict)

Je voudrais connaître un moyen de convertir les chaînes dans les emplois en int tels que 0, 1, 2 afin que «policier» soit la catégorie 0, «avocat» le numéro de catégorie 1 etc.

Plus largement, ma question est de trouver un moyen de calculer efficacement des prédictions sur cet ensemble de données avec des Librairies standards (Sklearn par exemple). Comme ils ne prennent pas en charge les chaînes en tant que fonctionnalité, j'ai pensé que je pouvais les convertir manuellement en int. Est-ce vraiment une bonne idée?

0
White 8 avril 2020 à 15:06

3 réponses

Vous pouvez utiliser le LabelEncoder pour ce faire:

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
df['job_code'] = le.fit_transform(df.job)

Cela transformera votre variable de travail en une représentation numérique "

    age job         job_code
0   19  policeman   2
1   35  lawyer      1
2   47  doctor      0
0
Allen 8 avril 2020 à 12:15

Pour répondre à votre question réelle ("comment créer une colonne de nombres représentant des catégories, basée sur une colonne de chaînes répétées"):

Vous pouvez créer une nouvelle colonne numérique pour vos catégories en créant une liste des chaînes uniques, puis en demandant à chaque chaîne de la colonne quel est son index dans cette liste:

import pandas as pd 
d = {'age' : [19, 35, 47, 31, 29],
     'job' : ['policeman', 'lawyer', 'doctor', 'lawyer', 'doctor']} 
df = pd.DataFrame(d)

jobs = list(df.job.unique())
df['job_cat'] = df.job.apply(lambda x: jobs.index(x))

# resulting dataframe:
#    age        job  job_cat
# 0   19  policeman        0
# 1   35     lawyer        1
# 2   47     doctor        2
# 3   31     lawyer        1
# 4   29     doctor        2

Bien que si votre objectif est de coder à chaud vos catégories pour l'apprentissage automatique, vous devez vraiment utiliser OneHotEncoder de scikit-learn.

0
jfaccioni 8 avril 2020 à 12:21

Si vous souhaitez les utiliser comme fonctionnalités dans votre prédiction, la réponse d'Allen est correcte et vous utilisez un codage unique.

Mais si vous voulez faire ce que vous avez demandé, ce code pourrait être utile

map_dict = {'policeman':0, 'lawyer':1, 'doctor':2}
df.job = df.job.map(map_dict)
0
Duccio Piovani 8 avril 2020 à 12:14