Pandas converteixen valors categòrics en valors int

Pandas Converteixen Valors Categorics En Valors Int



Els conjunts de dades per a l'execució d'aprenentatge automàtic inclouen variables tant numèriques com categòriques. Les variables categòriques són dades de tipus cadena que els humans comprenen fàcilment. Les màquines, en canvi, no poden entendre directament les entrades categòriques. En conseqüència, el contingut categòric s'ha de transformar en valors numèrics que les màquines puguin interpretar.

Mètodes per convertir categòric a int

Les tècniques disponibles a 'pandas' per convertir els valors categòrics a int d'un DataFrame es proporcionen aquí:

    • Mètode DataFrame.replace().
    • Mètode DataFrame.apply(factorize()).

Utilitzarem aquests mètodes en aquest article i explicarem amb detall com utilitzar els dos mètodes en 'pandes'.







Exemple # 1: utilitzant el mètode Pandas Replace().

Els valors categòrics d'un DataFrame es poden convertir a int mitjançant el mètode pandas 'DataFrame.replace()'. Aprendrem aquí a utilitzar aquest mètode.



Hem utilitzat l'eina 'Spyder' per executar aquesta tècnica de manera òptima en Python. Per començar a escriure l'script, obriu un nou fitxer Python a l'eina 'Spyder'. El requisit més important per escriure l'script és importar les biblioteques adequades. Com que hem d'implementar un mètode 'pandas', tindrem el 'import pandas com a pd' per accedir a les funcions de 'pandas'. A continuació, iniciem el nostre codi bàsic de Python. Hem creat un DataFrame mitjançant el mètode 'pd.DataFrame()'. El DataFrame s'inicialitza amb tres columnes 'Nom', 'Grau' i 'Ingressos'. Totes les columnes del DataFrame emmagatzemen la mateixa longitud de valors.



La primera columna, 'Nom', té vuit valors que són 'bush', 'albert', 'harry', 'peter', 'emma', 'newton', 'smith' i 'elsa'. La segona columna, 'Grau', també emmagatzema vuit valors categòrics, que són 'BS', 'MS', 'MS', 'BS', 'BS', 'BS', 'MS' i 'MS'. L'última columna 'Ingressos' té vuit valors enters '60000', '80000', '75000', '45000', '56000', '65000', '55000' i '70000'. Hem creat un objecte DataFrame 'staff' per emmagatzemar la sortida de la invocació de la funció 'pd.DataFrame()'. Per mostrar el nostre DataFrame inicial, hem utilitzat el mètode 'print()' amb el nom de DataFrame 'staff' com a paràmetre a la línia final de l'script.






Per veure la sortida al terminal, utilitzeu el botó 'Executar fitxer' de l'eina 'Spyder' o premeu les tecles 'Maj + Enter'. La sortida que es mostra al terminal mostra un DataFrame amb tres columnes que s'han generat correctament.


Ara, el nostre DataFrame està construït, hem d'aplicar-hi la tècnica necessària. El mètode pandas 'DataFrame.replace()' s'utilitzarà per convertir els valors categòrics d'una columna especificada en valors enters perquè les màquines puguin fer-los llegibles.



Hem proporcionat el nom del DataFrame amb el nom de columna particular els valors de la qual hem de substituir, que és 'staff['degree']'. Volem que els valors de la columna 'Grau', que té valors categòrics, es substitueixin per valors enters. Aleshores s'invoca el mètode '.replace()'. L'hem passat en dos conjunts; el primer conté els dos valors categòrics '['BS', 'MS']' que vam extreure de la columna 'Grau'. Com podeu veure, la columna 'Grau' utilitza aquests dos valors repetidament. Si tinguéssim un tercer valor, també ho hauríem d'haver esmentat. El segon conjunt té dos valors int '[0, 1]', que substituiran els valors del primer conjunt respectivament. L'altre paràmetre, 'inplace', s'estableix com a 'True', que permet la substitució de valors. Si s'estableix a 'False', es desactivarà la substitució. Finalment, hem utilitzat el mètode 'print()' per mostrar el DataFrame actualitzat 'staff'.


El DataFrame resultant té valors enters a la columna 'Graus'. El valor 'BS' es substitueix per '0s' i 'MS' es substitueix per '1s'.


Fins i tot podeu verificar el tipus de dades de cada columna utilitzant la propietat 'dataframe.dtype'. Això ens obtindrà els tipus de dades de totes les columnes del DataFrame especificat.


Aquí tenim els tipus de dades del nostre DataFrame. Podem veure que el tipus de dades de la columna 'Grau' canvia a 'int64'.

Exemple # 2: utilitzant el mètode Pandas apply().

L'altre mètode que ens han proporcionat és la funció 'DataFrame.apply()' per convertir valors categòrics en nombres enters. A l'exemple anterior, hem après a convertir una columna categòrica en un nombre enter. Ara veurem com convertir totes les columnes categòriques del DataFrame en un int.

Començant per la implementació pràctica, hem d'importar la biblioteca essencial per a aquest mètode, que són els pandes. Hem utilitzat l'script 'import pandas as pd' per importar pandes al nostre fitxer Python a l'eina 'Spyder', que ens permetrà accedir als mòduls pandas mitjançant el 'pd'. Hem utilitzat la funció 'pd.DataFrame()' per construir un DataFrame.

Aquest DataFrame té quatre columnes 'grup', 'posició', 'puntuació' i 'ajudes'. Cada columna emmagatzema 9 valors. Els valors de la columna 'grup' són 'X', 'X', 'Y', 'X', 'Y', 'Y', 'Y', 'X' i 'Y'. La columna 'posició' té 9 valors que són 'A', 'C', 'D', 'A', 'C', 'B', 'B', 'D' i 'B'. La columna 'puntuació' té valors enters com '4', '8', '7', '10', '9', '5', '7', '3' i '23'. L'última columna, 'ajudes', té els valors '10', '2', '3', '9', '3', '7', '4', '2' i '9'.

Hem creat un objecte DataFrame 'prog' i li hem assignat la sortida d'invocar el mètode 'pd.DataFrame()'. Per tant, el marc de DataFrame resultant generat a partir del 'pd.DataFrame()' s'emmagatzemarà a 'prog'. Ara, podem accedir al DataFrame mitjançant aquest objecte. Per veure aquest DataFrame, hem emprat el mètode 'print()' amb l'objecte DataFrame 'prog' com a paràmetre.


Quan s'executa el programa Python anterior, es mostrarà un DataFrame amb quatre columnes al terminal.


Per convertir diverses columnes categòriques en nombres enters, hem seguit aquesta tècnica. Primer hem de seleccionar totes les columnes que contenen el tipus de dades d'objecte utilitzant el mètode pandas 'DataFrame.select_dtypes().columns'. Quan l'utilitzem al nostre script segons sigui necessari, serà 'prog.select_dtypes(['object']).columns'. Seleccionarà totes les columnes que tinguin el tipus de dades 'objecte' al DataFrame 'prog'. Hem creat una variable 'concate_col' per emmagatzemar la sortida d'aquest mètode. Ara podem accedir a les columnes del tipus de dades 'objecte' simplement utilitzant aquesta variable 'concat_col'.

Ara, per convertir aquestes columnes en nombres enters, hem utilitzat els pandes “DataFrame.apply()” amb el mètode “pd.factorize()”. Hem utilitzat la variable 'concat_col' amb el nom DataFrame i després s'invoca el mètode '.apply()'. Entre els parèntesis del mètode '.apply', hem anomenat el mètode 'pd.factorize()' on 'x' pot ser qualsevol valor del DataFrame 'prog' amb el tipus de dades 'objecte'. Així, tota aquesta línia de codi s'escriu com a “prog['concat_col'] = prog['concat_col'].apply(lambda x : pd.factorize(x)[0])”. El mètode factorize prendrà un valor amb un tipus de dades 'objecte' i convertir-lo en 'int'. La sortida final es pot mostrar cridant a la funció 'print()' passant la variable 'prog' com a paràmetre.


Al DataFrame actualitzat, podem observar que els valors de les columnes 'grup' i 'posició' eren inicialment categòrics, és a dir, objecte. Encara a la sortida actualitzada DataFrame, ambdues columnes tenen valors enters. A la columna 'grup', 'X' es substitueix per '0' i 'Y' per '1'. Mentre que la columna 'posició' 'A' es substitueix per '0', 'C' per '1', 'D' per '2' i 'B' per '3'.


Ara, verifiquem els tipus de dades actualitzats.


Totes les columnes següents tenen el tipus de dades 'int64'.

Conclusió

La nostra guia gira al voltant de la conversió de valors categòrics en valors numèrics perquè les màquines els puguin entendre, ja que no poden processar el tipus de dades de l'objecte. Us hem presentat els dos enfocaments que ofereix la biblioteca 'pandas' per obtenir el tipus de dades necessari. A més, amb la implementació pràctica de codis d'exemple executats a l'eina 'Spyder', vam compartir el resultat de cada exemple. Finalment, vam elaborar cada pas per aconseguir el resultat desitjat.