Pandas - Konverter kategoriske verdier til int -verdier

Pandas - Konverter kategoriske verdier til int -verdier

Datasettene for utførelse av maskinlæring inkluderer både numeriske og kategoriske variabler. Kategoriske variabler er data fra strengtype som mennesker lett forstår. Maskiner kan derimot ikke forstå kategoriske innganger direkte. Følgelig må kategorisk innhold transformeres til numeriske verdier som maskiner kan tolke.

I denne opplæringen vil vi diskutere tre forskjellige måter å konvertere kategoriske verdier til numeriske verdier i Pandas DataFrame

Tilnærming 1: Bruke erstatning ()

I Python brukes erstatning () til å endre eller konvertere de gitte verdiene til nye verdier som vi spesifiserte. For å erstatte flere verdier, må vi passere to lister som parametere. Den første listen vil lagre de faktiske verdiene som skal erstattes, og den andre listen vil lagre verdiene som erstatter verdiene i den første listen.

Syntaks

DataFrame_Object ['Column'] = DataFrame_Object ['Column'].erstatte ([verdi1, verdi2,…], [verdi1, verdi2,…])

Her er kolonnen navnet på kolonnen vi erstatter verdiene.

Tenk på DataFrame

La oss opprette Pandas DataFrame som heter settene som holder 4 kolonner med 10 rader.

# Importer DataFrame fra Pandas -modulen
Fra Pandas importer DataFrame
# Lag en DataFrame med 10 rader som holder 4 kolonner
sett = DataFrame ('kode': [1,2,3,4,5,6,7,8,9,0],
'Prioritet': ['High', 'Low', 'Low', 'High', 'Medium', 'High', 'Medium', 'Low', 'High', 'Medium'],
'kjønn': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Alder': [12,23,21,34,21,23,21,34,56,32])
# Faktisk DataFrame
trykk (sett)
# Vis datatyper av hver kolonne
trykk (sett.dypes)

Produksjon

Kodeprioritet kjønnsalder
0 1 høy m 12
1 2 lav m 23
2 3 Lav M 21
3 4 høy f 34
4 5 medium m 21
5 6 høy m 23
6 7 Medium F 21
7 8 Lav F 34
8 9 høy m 56
9 0 Medium F 32
Kode Int64
Prioritetsobjekt
Kjønnsobjekt
alder Int64
dtype: objekt

Vi ser to kolonner med den kategoriske typen (objekt), i.e., prioritet og kjønn.

Så vi må konvertere disse til numeriske/heltallverdier.

Eksempel 1

La oss erstatte verdier i kjønnskolonnen ved å bruke erstatningsmetode.

# Importer DataFrame fra Pandas -modulen
Fra Pandas importer DataFrame
# Lag en DataFrame med 10 rader som holder 4 kolonner
sett = DataFrame ('kode': [1,2,3,4,5,6,7,8,9,0],
'Prioritet': ['High', 'Low', 'Low', 'High', 'Medium', 'High', 'Medium', 'Low', 'High', 'Medium'],
'kjønn': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Alder': [12,23,21,34,21,23,21,34,56,32])
# Konverter kategoriske verdier til numeriske verdier i kjønnskolonnen
setter ['kjønn'] = setter ['kjønn'].erstatte (['m', 'f'], [1, 2])
trykk (sett)

Produksjon

Kodeprioritet kjønnsalder
0 1 høy 1 12
1 2 lav 1 23
2 3 Lav 1 21
3 4 høy 2 34
4 5 Medium 1 21
5 6 Høy 1 23
6 7 Medium 2 21
7 8 Lav 2 34
8 9 Høy 1 56
9 0 Medium 2 32

Forklaring

Vi erstatter 'M' med 1 og 'F' med 2 og lagrer kolonneverdiene igjen i kjønnskolonnen. Vi kan se at kjønnskolonnen har verdier innen 1 eller 2.

Eksempel 2

La oss erstatte verdier i prioriteringskolonnen ved å bruke erstatningsmetode.

# Importer DataFrame fra Pandas -modulen
Fra Pandas importer DataFrame
# Lag en DataFrame med 10 rader som holder 4 kolonner
sett = DataFrame ('kode': [1,2,3,4,5,6,7,8,9,0],
'Prioritet': ['High', 'Low', 'Low', 'High', 'Medium', 'High', 'Medium', 'Low', 'High', 'Medium'],
'kjønn': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Alder': [12,23,21,34,21,23,21,34,56,32])
# Konverter kategoriske verdier til numeriske verdier i prioriteringskolonnen
setter ['prioritet'] = setter ['prioritet'].erstatte (['lav', 'medium', 'høy'], [0,1,2])
trykk (sett)

Produksjon

Kodeprioritet kjønnsalder
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

Forklaring

Det er tre kategorier i prioriteringskolonnen. De er 'lave', 'høye' og 'medium'. Vi erstatter 'lav' med 0, 'medium' med 1 og 'høy' med 2 og lagrer kolonneverdiene igjen i prioriteringskolonnen.

Tilnærming 2: Bruke Apply (Factorize ())

Den andre metoden Pandas ga oss er 'DataFrame.Bruk () 'Funksjon for å konvertere alle kategoriske verdier til heltall.

For å konvertere flere kategoriske kolonner til heltall, har vi fulgt denne teknikken:

  1. Vi må velge alle kolonnene som inneholder objektdatatype ved å bruke Pandas 'DataFrame.SELECT_DTYPES ().Kolonnens metode.
  2. For å konvertere disse kolonnene til heltall, må vi bruke Pandas 'DataFrame.Bruk () 'med' Pandas.factorize () 'metode.

Faktoriseringsmetoden vil ta en verdi med en 'objekt' datatype og konvertere den til 'int'.

Hvis du bare vil konvertere en bestemt kolonnes kategoriske verdier til heltall, brukes ikke ().

Syntaks for enkeltkolonne

DataFrame_Object ['Column'] = Pandas.Factorize (DataFrame_Object ['Column']) [0]

Syntaks for alle kolonnene

DataFrame_Object [DataFrame_Object.SELECT_DTYPES (['Object']).Kolonner] = DataFrame_Object [DataFrame_Object.SELECT_DTYPES (['Object']).kolonner].Bruk (Lambda X: Pandas.faktorisere (x) [0])

Merk: Erstatning starter fra 0.

Eksempel 1: Erstatt kategoriske verdier for enkeltkolonner

La oss erstatte verdier i kjønnskolonnen ved å bruke Factorize () -metoden.

# Importer DataFrame fra Pandas -modulen
Fra Pandas importer DataFrame
Importer pandaer
# Lag en DataFrame med 10 rader som holder 4 kolonner
sett = DataFrame ('kode': [1,2,3,4,5,6,7,8,9,0],
'Prioritet': ['High', 'Low', 'Low', 'High', 'Medium', 'High', 'Medium', 'Low', 'High', 'Medium'],
'kjønn': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Alder': [12,23,21,34,21,23,21,34,56,32])
# Konverter kategoriske verdier til heltall ved bruk av Factorize () -metode til stede i kjønnskolonne
setter ['kjønn'] = pandas.Factorize (setter ['kjønn']) [0]
# Faktisk DataFrame
trykk (sett)

Produksjon

Kodeprioritet kjønnsalder
0 1 Høy 0 12
1 2 Lav 0 23
2 3 Lav 0 21
3 4 høy 1 34
4 5 Medium 0 21
5 6 Høy 0 23
6 7 Medium 1 21
7 8 Lav 1 34
8 9 Høy 0 56
9 0 Medium 1 32

Forklaring

Vi erstatter 'M' med 0 og 'F' med 1 og lagrer kolonneverdiene igjen i kjønnskolonnen. Nå kan vi se at kjønnskolonnen har verdier innen 0 eller 1.

Eksempel 2: Erstatt alle kolonne kategoriske verdier

La oss erstatte verdier i alle kolonnene ved å bruke Apply (Factorize ()) metode.

# Importer DataFrame fra Pandas -modulen
Fra Pandas importer DataFrame
Importer pandaer
# Lag en DataFrame med 10 rader som holder 4 kolonner
sett = DataFrame ('kode': [1,2,3,4,5,6,7,8,9,0],
'Prioritet': ['High', 'Low', 'Low', 'High', 'Medium', 'High', 'Medium', 'Low', 'High', 'Medium'],
'kjønn': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Alder': [12,23,21,34,21,23,21,34,56,32])
# Erstatt alle kolonne kategoriske verdier
sett [sett.SELECT_DTYPES (['Object']).kolonner] = sett [sett.SELECT_DTYPES (['Object']).kolonner].Bruk (Lambda X: Pandas.faktorisere (x) [0])
trykk (sett)

Produksjon

Kodeprioritet kjønnsalder
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

Forklaring

Vi kan se i å følge:

  1. I kjønnskolonnen erstattes 'M' med 0, og 'F' erstattes med 1.
  2. Prioritetskolonne, 'høy' erstattes med 0, 'lav' erstattes med 1, og 'medium' erstattes med 2.

Så langt har vi sett erstatning av kategoriske verdier til heltallverdier i enkelt- eller alle kolonner med kjente kategoriske verdier. Anta at det er et stort datasett med mer enn en lakh -poster. Hvordan erstatte de kategoriske verdiene?

Løsningen er etikettkoding.

La oss diskutere denne tilnærmingen.

Tilnærming 3: Bruke labelenCoding

LabelEnCoder () er metoden som er til stede inne i Sklearn -modulen, som vil konvertere kategoriske verdier for en bestemt kolonne til et heltall. Vi trenger ikke å spesifisere de kategoriske verdiene.

FIT_TRANSFORM () Metode brukes sammen med LabelEnCoder () som passer til de transformerte verdiene.

I denne teknikken starter de erstattede verdiene fra 0, og erstatningen gjøres i alfabetisk rekkefølge for de kategoriske verdiene.

Syntaks

DataFrame_Object ['Column'] = LabelEnCoder ().Fit_Transform (DataFrame_Object ['Column'])

Her er kolonnen navnet på kolonnen vi erstatter verdiene.

Eksempel

La oss erstatte verdier i kjønn, prioriterte kolonner ved å bruke følgende tilnærming:

# Importer DataFrame fra Pandas -modulen
Fra Pandas importer DataFrame
Importer pandaer
# Importer etikett fra Sklearn Module
Fra Sklearn.Forbehandling av import labelencoder
# Lag en DataFrame med 10 rader som holder 4 kolonner
sett = DataFrame ('kode': [1,2,3,4,5,6,7,8,9,0],
'Prioritet': ['High', 'Low', 'Low', 'High', 'Medium', 'High', 'Medium', 'Low', 'High', 'Medium'],
'kjønn': ['m', 'm', 'm', 'f', 'm', 'm', 'f', 'f', 'm', 'f'],
'Alder': [12,23,21,34,21,23,21,34,56,32])
# Konverter kategoriske verdier av kjønnskolonnen til numerisk
setter ['kjønn'] = labelEncoder ().fit_transform (setter ['kjønn'])
# Konverter kategoriske verdier av prioritert kolonne til numerisk
Setter ['Prioritet'] = LabelEnCoder ().fit_transform (setter ['prioritet'])
trykk (sett)

Produksjon

Kodeprioritet kjønnsalder
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

Forklaring

  1. Vi erstatter 'M' med 1 og 'F' med 2 og lagrer kolonneverdiene igjen i kjønnskolonnen. Nå kan vi se at kjønnskolonnen har verdier innen 1 eller 2.
  2. Det er tre kategorier i prioriteringskolonnen. De er 'lave', 'høye' og 'medium'. Vi erstatter 'lav' med 0, 'medium' med 1 og 'høy' med 2 og lagrer kolonneverdiene igjen i prioriteringskolonnen.

Konklusjon

Vår guide dreier seg om å konvertere kategoriske verdier til numeriske verdier slik at de kan gjøres forståelige av maskinene, da objektdatatypen ikke kan behandles av dem. Vi har introdusert deg for de tre tilnærmingene som er omtalt av "Pandas" -biblioteket for å få den nødvendige datatypen. Husk at du bør bruke labelenCoding -tilnærmingen, da du ikke vet hvor mange kategorier som er til stede i kolonnen i Pandas DataFrame.