PANDAS - Converti i valori categorici in valori int

PANDAS - Converti i valori categorici in valori int

I set di dati per l'esecuzione dell'apprendimento automatico includono variabili sia numeriche che categoriche. Le variabili categoriche sono dati di tipo stringa che gli umani comprendono facilmente. Le macchine, d'altra parte, non possono comprendere direttamente gli input categorici. Di conseguenza, il contenuto categorico deve essere trasformato in valori numerici che le macchine possono interpretare.

In questo tutorial, discuteremo di tre diversi modi per convertire i valori categorici in valori numerici nel Frame di dati Panda

Approccio 1: utilizzando sostituti ()

In Python, sostituire () viene utilizzato per modificare o convertire i valori dati in nuovi valori che abbiamo specificato. Per sostituire più valori, dobbiamo passare due elenchi come parametri. Il primo elenco archiverà i valori effettivi da sostituire e il secondo elenco memorizzerà i valori che sostituiscono i valori nel primo elenco.

Sintassi

Dataframe_object ['colonna'] = dataframe_object ['colonna'].Sostituisci ([valore1, valore2,…], [valore1, valore2,…])

Qui, la colonna è il nome della colonna in cui stiamo sostituendo i valori.

Considera il frame dati

Creiamo il telaio dati Pandas denominato imposta che tengono 4 colonne con 10 righe.

# Importa il frame dati dal modulo Pandas
da Panda Import DataFrame
# Crea un frame dati con 10 righe che contengono 4 colonne
sets = dataFrame ('code': [1,2,3,4,5,6,7,8,9,0],
"Priorità": ["alto", "basso", "basso", "alto", "mezzo", "alto", "mezzo", "basso", "alto", "mezzo",
'Genere': ['M', 'M', 'M', 'F', 'M', 'M', 'F', 'F', 'M', 'F',
'Age': [12,23,21,34,21,23,21,34,56,32])
# Frame di dati effettivi
Stampa (set)
# Visualizza i tipi di dati di ogni colonna
Stampa (set.dtypes)

Produzione

Codice Priority Gender Age
0 1 alto M 12
1 2 basso m 23
2 3 bassi m 21
3 4 alto f 34
4 5 Medium M 21
5 6 alto m 23
6 7 Medium F 21
7 8 Basso F 34
8 9 alto M 56
9 0 Medium F 32
Codice int64
oggetto prioritario
Oggetto di genere
età int64
dType: oggetto

Vediamo due colonne con il tipo categorico (oggetto), i.e., priorità e genere.

Quindi dobbiamo convertirli in valori numerici/interi.

Esempio 1

Sostituiamo i valori nella colonna di genere usando il metodo sostituito ().

# Importa il frame dati dal modulo Pandas
da Panda Import DataFrame
# Crea un frame dati con 10 righe che contengono 4 colonne
sets = dataFrame ('code': [1,2,3,4,5,6,7,8,9,0],
"Priorità": ["alto", "basso", "basso", "alto", "mezzo", "alto", "mezzo", "basso", "alto", "mezzo",
'Genere': ['M', 'M', 'M', 'F', 'M', 'M', 'F', 'F', 'M', 'F',
'Age': [12,23,21,34,21,23,21,34,56,32])
# Converti i valori categorici in valori numerici nella colonna di genere
set ['Gender'] = set ['Gender'].sostituire (['m', 'f'], [1, 2])
Stampa (set)

Produzione

Codice Priority Gender Age
0 1 alto 1 12
1 2 basso 1 23
2 3 basso 1 21
3 4 alto 2 34
4 5 Medium 1 21
5 6 alto 1 23
6 7 Medium 2 21
7 8 basso 2 34
8 9 alto 1 56
9 0 Medium 2 32

Spiegazione

Stiamo sostituendo 'M' con 1 e 'f' con 2 e memorizzando nuovamente i valori della colonna nella colonna di genere. Possiamo vedere che la colonna di genere contiene valori entro 1 o 2.

Esempio 2

Sostituiamo i valori nella colonna prioritaria usando il metodo sostituito ().

# Importa il frame dati dal modulo Pandas
da Panda Import DataFrame
# Crea un frame dati con 10 righe che contengono 4 colonne
sets = dataFrame ('code': [1,2,3,4,5,6,7,8,9,0],
"Priorità": ["alto", "basso", "basso", "alto", "mezzo", "alto", "mezzo", "basso", "alto", "mezzo",
'Genere': ['M', 'M', 'M', 'F', 'M', 'M', 'F', 'F', 'M', 'F',
'Age': [12,23,21,34,21,23,21,34,56,32])
# Converti i valori categorici in valori numerici nella colonna prioritaria
set ['priorità'] = set ['priorità'].Sostituisci (["basso", "mezzo", "alto"], [0,1,2])
Stampa (set)

Produzione

Codice Priority Gender Age
0 1 2 m 12
1 2 0 m 23
2 3 0 m 21
3 4 2 f 34
4 5 1 m 21
5 6 2 m 23
6 7 1 f 21
7 8 0 f 34
8 9 2 m 56
9 0 1 f 32

Spiegazione

Ci sono tre categorie nella colonna prioritaria. Sono "bassi", "alti" e "medium". Stiamo sostituendo "basso" con 0, "mezzo" con 1 e "alto" con 2 e memorizzando nuovamente i valori della colonna nella colonna prioritaria.

Approccio 2: Utilizzo di Applica (Facorize ())

L'altro metodo Panda ci ha fornito è il "dati di dati.applicare () 'funzione per la conversione di tutti i valori categorici in numeri interi.

Per convertire più colonne categoriche in numeri interi, abbiamo seguito questa tecnica:

  1. Dobbiamo selezionare tutte le colonne che contengono un dati di dati oggetto utilizzando il telaio di dati dei Pandas.Select_Dtypes ().Metodo delle colonne.
  2. Per convertire queste colonne in numeri interi, dobbiamo utilizzare il telaio di dati dei Pandas.Applica () "con i" panda.metodo Factorize () '.

Il metodo Factorize prenderà un valore con un tipo di dati "oggetto" e lo convertirà in "int".

Se si desidera convertire solo i valori categorici di una colonna in particolare in numeri interi, allora Applica () non viene utilizzato.

Sintassi per singola colonna

Dataframe_object ['colonna'] = panda.fattorize (dataframe_object ['colonna']) [0]

Sintassi per tutte le colonne

DataFrame_Object [dataframe_object.Select_Dtypes (['Object']).colonne] = dataframe_object [dataframe_object.Select_Dtypes (['Object']).colonne].Applica (Lambda X: Panda.fattorize (x) [0])

Nota: La sostituzione inizierà da 0.

Esempio 1: sostituire i valori categorici a colonna singola

Sostituiamo i valori nella colonna di genere usando il metodo Factorize ().

# Importa il frame dati dal modulo Pandas
da Panda Import DataFrame
Panda di importazione
# Crea un frame dati con 10 righe che contengono 4 colonne
sets = dataFrame ('code': [1,2,3,4,5,6,7,8,9,0],
"Priorità": ["alto", "basso", "basso", "alto", "mezzo", "alto", "mezzo", "basso", "alto", "mezzo",
'Genere': ['M', 'M', 'M', 'F', 'M', 'M', 'F', 'F', 'M', 'F',
'Age': [12,23,21,34,21,23,21,34,56,32])
# Converti i valori categorici in numeri interi usando il metodo Factorize () presente nella colonna di genere
set ['Gender'] = Panda.Factorize (set ['Gender']) [0]
# Frame di dati effettivi
Stampa (set)

Produzione

Codice Priority Gender Age
0 1 alto 0 12
1 2 basso 0 23
2 3 basso 0 21
3 4 alto 1 34
4 5 Medium 0 21
5 6 alto 0 23
6 7 Medium 1 21
7 8 basso 1 34
8 9 alto 0 56
9 0 Medium 1 32

Spiegazione

Stiamo sostituendo 'M' con 0 e 'f' con 1 e memorizzando nuovamente i valori della colonna nella colonna di genere. Ora, possiamo vedere che la colonna di genere contiene valori entro 0 o 1.

Esempio 2: sostituire tutti i valori categorici della colonna

Sostituiamo i valori in tutte le colonne utilizzando il metodo Appl (Facorize ()).

# Importa il frame dati dal modulo Pandas
da Panda Import DataFrame
Panda di importazione
# Crea un frame dati con 10 righe che contengono 4 colonne
sets = dataFrame ('code': [1,2,3,4,5,6,7,8,9,0],
"Priorità": ["alto", "basso", "basso", "alto", "mezzo", "alto", "mezzo", "basso", "alto", "mezzo",
'Genere': ['M', 'M', 'M', 'F', 'M', 'M', 'F', 'F', 'M', 'F',
'Age': [12,23,21,34,21,23,21,34,56,32])
# Sostituisci tutti i valori categorici della colonna
Set [set.Select_Dtypes (['Object']).colonne] = set [set.Select_Dtypes (['Object']).colonne].Applica (Lambda X: Panda.fattorize (x) [0])
Stampa (set)

Produzione

Codice Priority Gender Age
0 1 0 0 12
1 2 1 0 23
2 3 1 0 21
3 4 0 1 34
4 5 2 0 21
5 6 0 0 23
6 7 2 1 21
7 8 1 1 34
8 9 0 0 56
9 0 2 1 32

Spiegazione

Possiamo vedere seguenti:

  1. Nella colonna di genere, "m" viene sostituito con 0 e "f" viene sostituito con 1.
  2. La colonna prioritaria, "alta" viene sostituita con 0, "basso" viene sostituita con 1 e "mezzo" viene sostituito con 2.

Finora, abbiamo visto la sostituzione dei valori categorici ai valori interi in tutte le colonne con valori categorici noti. Supponiamo che ci sia un enorme set di dati con più di un record lakh. Come sostituire i valori categorici?

La soluzione è la codifica dell'etichetta.

Discutiamo di questo approccio.

Approccio 3: Utilizzo di etichetta

Etichetto () è il metodo presente all'interno del modulo Sklearn, che convertirà i valori categorici di una particolare colonna in un numero intero. Non abbiamo bisogno di specificare i valori categorici.

Il metodo fit_transform () viene utilizzato insieme a etichetto () che si adatta ai valori trasformati.

In questa tecnica, i valori sostituiti iniziano da 0 e la sostituzione viene eseguita in ordine alfabetico dei valori categorici.

Sintassi

DataFrame_Object ['colonna'] = etichettaggio ().FIT_TRANSFORM (dataframe_object ['colonna'])

Qui, la colonna è il nome della colonna in cui stiamo sostituendo i valori.

Esempio

Sostituiamo i valori nel genere, colonne prioritarie usando il seguente approccio:

# Importa il frame dati dal modulo Pandas
da Panda Import DataFrame
Panda di importazione
# Importa etichettatore dal modulo Sklearn
da Sklearn.Preprocessing di importazione etichettatore
# Crea un frame dati con 10 righe che contengono 4 colonne
sets = dataFrame ('code': [1,2,3,4,5,6,7,8,9,0],
"Priorità": ["alto", "basso", "basso", "alto", "mezzo", "alto", "mezzo", "basso", "alto", "mezzo",
'Genere': ['M', 'M', 'M', 'F', 'M', 'M', 'F', 'F', 'M', 'F',
'Age': [12,23,21,34,21,23,21,34,56,32])
# Converti i valori categorici della colonna di genere in numerico
set ['Gender'] = LabelenCoder ().FIT_TRANSFORM (imposta ['Gender'])
# Converti i valori categorici della colonna prioritaria in numerico
set ['priorità'] = etichettaggio ().FIT_TRANSFORM (imposta ['priorità'])
Stampa (set)

Produzione

Codice Priority Gender Age
0 1 0 1 12
1 2 1 1 23
2 3 1 1 21
3 4 0 0 34
4 5 2 1 21
5 6 0 1 23
6 7 2 0 21
7 8 1 0 34
8 9 0 1 56
9 0 2 0 32

Spiegazione

  1. Stiamo sostituendo 'M' con 1 e 'f' con 2 e memorizzando nuovamente i valori della colonna nella colonna di genere. Ora, possiamo vedere che la colonna di genere contiene valori entro 1 o 2.
  2. Ci sono tre categorie nella colonna prioritaria. Sono "bassi", "alti" e "medium". Stiamo sostituendo "basso" con 0, "mezzo" con 1 e "alto" con 2 e memorizzando nuovamente i valori della colonna nella colonna prioritaria.

Conclusione

La nostra guida ruota attorno alla conversione dei valori categorici in valori numerici in modo che possano essere resi comprensibili dalle macchine poiché il tipo di dati dell'oggetto non può essere elaborato da loro. Ti abbiamo introdotto ai tre approcci presenti dalla libreria "Panda" per ottenere il tipo di dati richiesto. Ricorda, dovresti usare l'approccio di etichettatura poiché non sai quante categorie sono presenti nella colonna di Panda DataFrame.