Skip to content

Dans Pandas, la fonction ๐ฉโ€Œ๐โ€Œ.๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ() convertit les variables catรฉgorielles en variables fictives.

Cette fonction peut convertir des donnรฉes classรฉes par chaรฎnes, comme le sexe, en un format tel que 0 pour homme et 1 pour femme. Elle peut รฉgalement transformer des entitรฉs multi-classes en une reprรฉsentation one-hot, une pratique courante dans le prรฉtraitement pour l’apprentissage automatique.

Contenu

La version pandas utilisรฉe dans cet article est la suivante. Notez que les fonctionnalitรฉs peuvent varier selon les versions. Les donnรฉes suivantes sont utilisรฉes ร  titre d’exemple. Des colonnes ont รฉtรฉ ajoutรฉes ร  des fins d’explication.

import pandas as pd print(pd.__version__) # 2.1.2 df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0) df['sex'] = ['female', float('nan'), 'male', 'male', 'female', 'male'] df['rank'] = [2, 1, 1, 0, 2, 0] print(df) # age state point sex rank # name  # Alice 24 NY 64 female 2 # Bob 42 CA 92 NaN 1 # Charlie 18 CA 70 male 1 # Dave 68 TX 70 male 0 # Ellen 24 CA 88 female 2 # Frank 30 NY 57 male 0 

Utilisation de base de ๐ฉโ€Œ๐โ€Œ.๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ()

Le premier argument, ๐โ€Œ๐šโ€Œ๐ญโ€Œ๐šโ€Œ , de ๐ฉโ€Œ๐โ€Œ.๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ() peut รชtre un objet de type tableau S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ (comme une liste ou un tableau NumPy ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ ), ou un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ . Dans tous les cas, un nouveau D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est renvoyรฉ.

Spรฉcifiez S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ou un objet de type tableau comme premier argument

Lorsqu’un objet S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ou de type tableau (tel qu’une liste ou un tableau NumPy ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ ) est spรฉcifiรฉ comme premier argument, les noms de catรฉgorie sont utilisรฉs comme noms de colonne.

print(pd.get_dummies(df['sex'])) # female male # name  # Alice True False # Bob False False # Charlie False True # Dave False True # Ellen True False # Frank False True print(pd.get_dummies(['female', float('nan'), 'male', 'male', 'female', 'male'])) # female male # 0 True False # 1 False False # 2 False True # 3 False True # 4 True False # 5 False True 

Spรฉcifiez D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ comme premier argument

Lorsqu’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est spรฉcifiรฉ comme premier argument, par dรฉfaut, les colonnes dont le type de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ) est ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ (principalement des chaรฎnes) ou ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ โ€Œ๐จโ€Œ๐ซโ€Œ๐ฒโ€Œ sont toutes converties en variables factices. Les paramรจtres de conversion de colonnes d’autres types, comme les nombres, en variables factices sont abordรฉs plus loin.

Dans ce cas, les noms de colonnes rรฉsultantes suivent le format <ORIGINAL_COLUMN_NAME>_<CATEGORY_NAME> . Les paramรจtres permettant de modifier ce paramรจtre sont dรฉcrits plus loin.

print(pd.get_dummies(df)) # age point rank state_CA state_NY state_TX sex_female sex_male # name  # Alice 24 64 2 False True False True False # Bob 42 92 1 True False False False False # Charlie 18 70 1 True False False False True # Dave 68 70 0 False False True False True # Ellen 24 88 2 True False False True False # Frank 30 57 0 False True False False True 

Spรฉcifiez le type de donnรฉes pour les variables fictives : ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ

Par dรฉfaut, les variables fictives sont reprรฉsentรฉes par ๐›โ€Œ๐จโ€Œ๐จโ€Œ๐ฅโ€Œ ( T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ et F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ ).

Vous pouvez prรฉciser le type de donnรฉes avec l’argument ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ . ร‰tant donnรฉ que T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ et F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ sont dรฉfinis comme 1 et 0 respectivement, par exemple, indiquant ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ les reprรฉsentent comme 1 et 0 .

print(pd.get_dummies(df, dtype=int)) # age point rank state_CA state_NY state_TX sex_female sex_male # name  # Alice 24 64 2 0 1 0 1 0 # Bob 42 92 1 1 0 0 0 0 # Charlie 18 70 1 1 0 0 0 1 # Dave 68 70 0 0 0 1 0 1 # Ellen 24 88 2 1 0 0 1 0 # Frank 30 57 0 0 1 0 0 1 

Exclure la premiรจre catรฉgorie : ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐Ÿโ€Œ๐ขโ€Œ๐ซโ€Œ๐ฌโ€Œ๐ญโ€Œ

Lors de la conversion de ๐คโ€Œ catรฉgories en variables fictives, seules ๐คโ€Œ-1 variables fictives sont nรฉcessaires, mais par dรฉfaut, ๐ฉโ€Œ๐โ€Œ.๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ() les convertit en ๐คโ€Œ variables fictives.

La dรฉfinition de l’argument ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐Ÿโ€Œ๐ขโ€Œ๐ซโ€Œ๐ฌโ€Œ๐ญโ€Œ sur T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ exclut la premiรจre catรฉgorie et la convertit en variables fictives ๐คโ€Œ-1 .

print(pd.get_dummies(df, drop_first=True)) # age point rank state_NY state_TX sex_male # name  # Alice 24 64 2 True False False # Bob 42 92 1 False False False # Charlie 18 70 1 False False True # Dave 68 70 0 False True True # Ellen 24 88 2 False False False # Frank 30 57 0 True False True 

Dans les donnรฉes d’exemple, la valeur S de B๐จโ€Œ๐›โ€Œ est une valeur manquante N๐šโ€ŒN , et lorsque des variables fictives sont crรฉรฉes, ๐ฌโ€Œ๐žโ€Œ๐ฑโ€Œ_๐Ÿโ€Œ๐žโ€Œ๐ฆโ€Œ๐šโ€Œ๐ฅโ€Œ๐žโ€Œ et ๐ฌโ€Œ๐žโ€Œ๐ฑโ€Œ_๐ฆโ€Œ๐šโ€Œ๐ฅโ€Œ๐žโ€Œ deviennent F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ . Notez que dรฉfinir ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ_๐Ÿโ€Œ๐ขโ€Œ๐ซโ€Œ๐ฌโ€Œ๐ญโ€Œ sur T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ dans de tels cas entraรฎnerait la perte de l’information selon laquelle il s’agit de N๐šโ€ŒN . Pour convertir N๐šโ€ŒN en variables muettes, utilisez l’argument ๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ฒโ€Œ_๐งโ€Œ๐šโ€Œ prรฉsentรฉ ci-aprรจs.

Convertir les valeurs manquantes N๐šโ€ŒN en variables fictives : ๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ฒโ€Œ_๐งโ€Œ๐šโ€Œ

Par dรฉfaut, les valeurs manquantes N๐šโ€ŒN sont ignorรฉes et toutes les colonnes de variables factices deviennent F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ . Si vous souhaitez traiter N๐šโ€ŒN comme une catรฉgorie distincte pour les variables factices, dรฉfinissant l’argument ๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ฒโ€Œ_๐งโ€Œ๐šโ€Œ sur T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ .

Pour les colonnes qui ne contiennent pas N๐šโ€ŒN , une colonne de variable factice pour N๐šโ€ŒN sera toujours ajoutรฉe et tous ses รฉlรฉments seront F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ .

print(pd.get_dummies(df, drop_first=True, dummy_na=True)) # age point rank state_NY state_TX state_nan sex_male sex_nan # name  # Alice 24 64 2 True False False False False # Bob 42 92 1 False False False False True # Charlie 18 70 1 False False False True False # Dave 68 70 0 False True False True False # Ellen 24 88 2 False False False False False # Frank 30 57 0 True False False True False 

Spรฉcifiez les noms de colonnes pour les variables fictives : ๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ , ๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ_๐ฌโ€Œ๐žโ€Œ๐ฉโ€Œ

Pour une variable D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ , les noms de colonne par dรฉfaut pour les variables factices gรฉnรฉrรฉes sont <ORIGINAL_COLUMN_NAME>_<CATEGORY_NAME> . Vous pouvez modifier cela en spรฉcifiant les arguments ๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ et ๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ_๐ฌโ€Œ๐žโ€Œ๐ฉโ€Œ .

L’argument ๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ peut รชtre une chaรฎne, une liste ou un dictionnaire.

Si spรฉcifiรฉ sous forme de chaรฎne, tous les prรฉfixes seront identiques, comme <๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ>_<CATEGORY_NAME> . Si vous souhaitez que les noms de colonnes des variables factices soient uniquement les noms de catรฉgorie, dรฉfinis ๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ et ๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ_๐ฌโ€Œ๐žโ€Œ๐ฉโ€Œ sur une chaรฎne vide ย ยป .

print(pd.get_dummies(df, prefix='', prefix_sep='')) # age point rank CA NY TX female male # name  # Alice 24 64 2 False True False True False # Bob 42 92 1 True False False False False # Charlie 18 70 1 True False False False True # Dave 68 70 0 False False True False True # Ellen 24 88 2 True False False True False # Frank 30 57 0 False True False False True 

Vous pouvez dรฉfinir de nouveaux noms de colonnes sous forme de liste. Lorsque vous utilisez un dictionnaire pour ๐ฉโ€Œ๐ซโ€Œ๐žโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฑโ€Œ , mappez les noms de colonnes d’origine aux nouveaux en utilisant le format {๐จโ€Œ๐ซโ€Œ๐ขโ€Œ๐ โ€Œ๐ขโ€Œ๐งโ€Œ๐šโ€Œ๐ฅโ€Œ_๐œ โ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ_๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ : _๐งโ€Œ๐žโ€Œ๐ฐโ€Œ_๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎ๐ฌโ€Œ๐ž๐งโ€Œ_๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ} .

Une erreur se produit si le nombre d’รฉlรฉments dans la liste ou le dictionnaire ne correspond pas au nombre de colonnes ร  convertir. Assurez-vous que chaque colonne ร  convertir est prise en compte, mรชme si vous souhaitez conserver son nom d’origine.

print(pd.get_dummies(df, prefix=['ST', 'sex'], prefix_sep='-')) # age point rank ST-CA ST-NY ST-TX sex-female sex-male # name  # Alice 24 64 2 False True False True False # Bob 42 92 1 True False False False False # Charlie 18 70 1 True False False False True # Dave 68 70 0 False False True False True # Ellen 24 88 2 True False False True False # Frank 30 57 0 False True False False True print(pd.get_dummies(df, prefix={'state': 'ST', 'sex': 'sex'}, prefix_sep='-')) # age point rank ST-CA ST-NY ST-TX sex-female sex-male # name  # Alice 24 64 2 False True False True False # Bob 42 92 1 True False False False False # Charlie 18 70 1 True False False False True # Dave 68 70 0 False False True False True # Ellen 24 88 2 True False False True False # Frank 30 57 0 False True False False True 

Spรฉcifiez les colonnes ร  convertir en variables fictives : ๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ๐ฌโ€Œ

Par dรฉfaut, dans le cas d’un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ , les colonnes dont le type de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ) est ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ (principalement des chaรฎnes) ou ๐œโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ โ€Œ๐จโ€Œ๐ซโ€Œ๐ฒโ€Œ sont convertis en variables factices.

Vous pouvez รฉgalement convertir des colonnes numรฉriques et boolรฉennes en variables factices en spรฉcifiant les noms de colonnes sous forme de liste dans l’argument ๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ๐ฌโ€Œ . Les colonnes non spรฉcifiรฉes dans ๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ๐ฌโ€Œ ne sont pas converties.

print(pd.get_dummies(df, columns=['sex', 'rank'])) # age state point sex_female sex_male rank_0 rank_1 rank_2 # name  # Alice 24 NY 64 True False False False True # Bob 42 CA 92 False False False True False # Charlie 18 CA 70 False True False True False # Dave 68 TX 70 False True True False False # Ellen 24 CA 88 True False False False True # Frank 30 NY 57 False True True False False 

Prรฉcautions ร  prendre lors de la conversion de plusieurs donnรฉes avec ๐ฉโ€Œ๐โ€Œ.๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ()

Soyez prudent lorsque vous convertissez plusieurs donnรฉes avec ๐ฉโ€Œ๐โ€Œ.๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ() .

Considรฉrez les deux D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ๐ฌโ€Œ suivants .

df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0) df_A, df_B = df[:3].copy(), df[3:].copy() print(df_A) # age state point # name  # Alice 24 NY 64 # Bob 42 CA 92 # Charlie 18 CA 70 print(df_B) # age state point # name  # Dave 68 TX 70 # Ellen 24 CA 88 # Frank 30 NY 57 

La conversion de chacune d’entre elles avec ๐ฉโ€Œ๐โ€Œ.๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ() donne le rรฉsultat suivant. ร‰tant donnรฉ que chaque donnรฉe contient des catรฉgories diffรฉrentes, les colonnes rรฉsultantes diffรจrent.

print(pd.get_dummies(df_A)) # age point state_CA state_NY # name  # Alice 24 64 False True # Bob 42 92 True False # Charlie 18 70 True False print(pd.get_dummies(df_B)) # age point state_CA state_NY state_TX # name  # Dave 68 70 False False True # Ellen 24 88 True False False # Frank 30 57 False True False 

Pour rendre les colonnes de variables factices communes, utilisez le type catรฉgorique de pandas. Convertissez les colonnes cibles en type catรฉgorique ร  l’aide de ๐ฉโ€Œ๐โ€Œ.C๐šโ€Œ๐ญโ€Œ๐žโ€Œ๐ โ€Œ๐จโ€Œ๐ซโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ฅโ€Œ() .

categories = set(df_A['state'].tolist() + df_B['state'].tolist()) print(categories) # {'NY', 'TX', 'CA'} df_A['state'] = pd.Categorical(df_A['state'], categories) df_B['state'] = pd.Categorical(df_B['state'], categories) print(df_A['state'].dtypes) # category 

Ici, les catรฉgories sont gรฉnรฉrรฉes en convertissant chaque colonne en une liste avec ๐ญโ€Œ๐จโ€Œ๐ฅโ€Œ๐ขโ€Œ๐ฌโ€Œ๐ญโ€Œ() , en concatรฉnant ces listes, puis en supprimant les doublons avec ๐ฌโ€Œ๐žโ€Œ๐ญโ€Œ() .

Lorsque ๐ฉโ€Œ๐โ€Œ.๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐โ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฆโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ() est exรฉcutรฉe sur ces variables, des variables factices sont gรฉnรฉrรฉes en fonction des catรฉgories spรฉcifiques. Par exemple, la colonne ๐ฌโ€Œ๐ญโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ dans ๐โ€Œ๐Ÿโ€Œ_A ne contient pas TX , mais une colonne ๐ฌโ€Œ๐ญโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ_TX est lancรฉe.

print(pd.get_dummies(df_A)) # age point state_NY state_TX state_CA # name  # Alice 24 64 True False False # Bob 42 92 False False True # Charlie 18 70 False False True print(pd.get_dummies(df_B)) # age point state_NY state_TX state_CA # name  # Dave 68 70 False True False # Ellen 24 88 False False True # Frank 30 57 True False False 

Bien que les catรฉgories de l’exemple ci-dessus incluent des valeurs provenant d’au moins un des ensembles de donnรฉes, vous pouvez รฉgalement dรฉfinir vos propres catรฉgories, y compris des valeurs non prรฉsentes dans les ensembles de donnรฉes. Les valeurs ne correspondant pas ร  une catรฉgorie sont traitรฉes comme N๐šโ€ŒN .

categories = ['CA', 'NY'] df_A['state'] = pd.Categorical(df_A['state'], categories) df_B['state'] = pd.Categorical(df_B['state'], categories) print(df_A) # age state point # name  # Alice 24 NY 64 # Bob 42 CA 92 # Charlie 18 CA 70 print(df_B) # age state point # name  # Dave 68 NaN 70 # Ellen 24 CA 88 # Frank 30 NY 57 print(pd.get_dummies(df_A)) # age point state_CA state_NY # name  # Alice 24 64 False True # Bob 42 92 True False # Charlie 18 70 True False print(pd.get_dummies(df_B)) # age point state_CA state_NY # name  # Dave 68 70 False False # Ellen 24 88 True False # Frank 30 57 False True