Come convertire una variabile categoriale in numerica in pandas


È possibile utilizzare la seguente sintassi di base per convertire una variabile categoriale in una variabile numerica in un DataFrame panda:

 df[' column_name '] = pd. factorize (df[' column_name '])[0]

Puoi anche utilizzare la seguente sintassi per convertire ciascuna variabile categoriale in un DataFrame in una variabile numerica:

 #identify all categorical variables
cat_columns = df. select_dtypes ([' object ']). columns

#convert all categorical variables to numeric
df[cat_columns] = df[cat_columns]. apply ( lambda x: pd.factorize (x)[ 0 ])

Gli esempi seguenti mostrano come utilizzare questa sintassi nella pratica.

Esempio 1: convertire una variabile categoriale in numerica

Supponiamo di avere i seguenti panda DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
                   ' position ': ['G', 'G', 'F', 'G', 'F', 'C', 'G', 'F', 'C'],
                   ' points ': [5, 7, 7, 9, 12, 9, 9, 4, 13],
                   ' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12, 10]})

#view DataFrame
df

team position points rebounds
0 A G 5 11
1 A G 7 8
2 A F 7 10
3 B G 9 6
4 B F 12 6
5 B C 9 5
6 C G 9 9
7 C F 4 12
8 C C 13 10

Possiamo usare la seguente sintassi per convertire la colonna “team” in numerica:

 #convert 'team' column to numeric
df[' team '] = pd. factorize (df[' team '])[ 0 ]

#view updated DataFrame
df

team position points rebounds
0 0 G 5 11
1 0 G 7 8
2 0 F 7 10
3 1 G 9 6
4 1 F 12 6
5 1 C 9 5
6 2 G 9 9
7 2 F 4 12
8 2 C 13 10

Ecco come è andata la conversione:

  • Ogni squadra che aveva un valore di ” A ” è stata convertita in 0 .
  • Ogni squadra che aveva un valore “ B ” è stata convertita in 1 .
  • Ogni squadra che aveva un valore di ” C ” è stata convertita in 2 .

Esempio 2: convertire più variabili categoriali in valori numerici

Supponiamo ancora una volta di avere i seguenti DataFrame panda:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
                   ' position ': ['G', 'G', 'F', 'G', 'F', 'C', 'G', 'F', 'C'],
                   ' points ': [5, 7, 7, 9, 12, 9, 9, 4, 13],
                   ' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12, 10]})

#view DataFrame
df

        team position points rebounds
0 A G 5 11
1 A G 7 8
2 A F 7 10
3 B G 9 6
4 B F 12 6
5 B C 9 5
6 C G 9 9
7 C F 4 12
8 C C 13 10

Possiamo utilizzare la seguente sintassi per convertire ciascuna variabile categoriale nel DataFrame in una variabile numerica:

 #get all categorical columns
cat_columns = df. select_dtypes ([' object ']). columns

#convert all categorical columns to numeric
df[cat_columns] = df[cat_columns]. apply ( lambda x: pd.factorize (x)[ 0 ])

#view updated DataFrame
df

	team position points rebounds
0 0 0 5 11
1 0 0 7 8
2 0 1 7 10
3 1 0 9 6
4 1 1 12 6
5 1 2 9 5
6 2 0 9 9
7 2 1 4 12
8 2 2 13 10

Da notare che le due colonne categoriali (squadra e posizione) sono state entrambe convertite in numeri mentre le colonne punti e rimbalzi sono rimaste le stesse.

Nota : puoi trovare la documentazione completa della funzione pandas factorize() qui .

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre operazioni comuni nei panda:

Come convertire le colonne Pandas DataFrame in stringhe
Come convertire le colonne Pandas DataFrame in numeri interi
Come convertire le stringhe in float in Pandas DataFrame

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *