Módszerek a kategorikusból Int
A „pandákban” elérhető technikák a DataFrame kategorikus értékeinek int értékké konvertálására itt találhatók:
-
- DataFrame.replace() metódus
- DataFrame.apply(factorize()) metódus
Ebben a cikkben ezeket a módszereket fogjuk használni, és részletesen elmagyarázzuk, hogyan használhatjuk mindkét módszert „pandákban”.
1. példa: A Pandas Replace() metódus használata
A DataFrame-ben lévő kategorikus értékek a pandák „DataFrame.replace()” metódusával int-re konvertálhatók. Itt tanuljuk meg ennek a módszernek a használatát.
A „Spyder” eszközt használtuk a technika optimális végrehajtásához Pythonban. A szkript írásának megkezdéséhez nyisson meg egy új Python-fájlt a „Spyder” eszközben. A szkript megírásának legjelentősebb követelménye a megfelelő könyvtárak importálása. Mivel egy „pandák” módszert kell megvalósítanunk, a „pandák importálása pd-ként” lesz a „pandák” funkcióinak eléréséhez. Ezután elindítjuk az alapvető Python kódunkat. Létrehoztunk egy DataFrame-et a „pd.DataFrame()” metódussal. A DataFrame-et három oszlop „Név”, „Fokozat” és „Jövedelem” inicializálja. A DataFrame összes oszlopa azonos hosszúságú értékeket tárol.
Az első oszlop, a „Név” nyolc értéket tartalmaz, amelyek a következők: „bush”, „albert”, „harry”, „peter”, „emma”, „newton”, „smith” és „elsa”. A második oszlop, a „Fokozat” szintén nyolc kategorikus értéket tárol, amelyek a következők: „BS”, „MS”, „MS”, „BS”, „BS”, „BS”, „MS” és „MS”. Az utolsó „Jövedelem” oszlop nyolc egész számot tartalmaz: „60000”, „80000”, „75000”, „45000”, „56000”, „65000”, „55000” és „70000”. Létrehoztunk egy „staff” DataFrame objektumot, amely tárolja a „pd.DataFrame()” függvény meghívásának kimenetét. A kezdeti DataFrame megjelenítéséhez a „print()” metódust használtuk, és a DataFrame neve „staff” volt a paramétere a szkript utolsó sorában.
A terminál kimenetének megtekintéséhez használja a „Fájl futtatása” gombot a „Spyder” eszközön, vagy nyomja meg a „Shift+Enter” billentyűket. A terminálon megjelenített kimenet egy DataFrame-et mutat három oszloppal, amelyek sikeresen generálásra kerültek.
Most elkészült a DataFrame-ünk, amelyre a szükséges technikát kell alkalmazni. A pandák „DataFrame.replace()” metódusa egy adott oszlop kategorikus értékeit egész számokká konvertálja, hogy a gépek olvashatóvá tegyék azokat.
A DataFrame nevét megadtuk annak az oszlopnak a nevével, amelynek értékeit le kell cserélnünk, ez a „staff[’degree’]”. Azt akarjuk, hogy a „Fok” oszlop értékeit, amelyek kategorikus értékeket tartalmaznak, egész értékekkel helyettesítsük. Ezután a „.replace()” metódus kerül meghívásra. Két készletbe adtuk át; az első a „['BS', 'MS']” két kategorikus értéket tartalmazza, amelyeket a „Fokozat” oszlopból vettünk ki. Mint látható, a „Fokozat” oszlop ezt a két értéket ismételten használja. Ha volt egy harmadik értékünk, azt is meg kell említenünk. A második halmaznak két int értéke van „[0, 1]”, amelyek rendre felváltják az első beállított értékeket. A másik paraméter, az „inplace” értéke „True”, lehetővé téve az értékek cseréjét. Ha „False”-ra van állítva, akkor letiltja a cserét. Végül a „print()” metódust használtuk a frissített „staff” DataFrame megjelenítésére.
Az eredményül kapott DataFrame egész számokat tartalmaz a „Degree” oszlopban. A „BS” érték helyébe „0s”, az „MS” pedig „1s” lép.
Még az egyes oszlopok adattípusát is ellenőrizheti a „dataframe.dtype” tulajdonság használatával. Ezzel megkapjuk a megadott DataFrame összes oszlopának adattípusát.
Itt megkaptuk a DataFrame adattípusait. Láthatjuk, hogy a „Fok” oszlop adattípusa „int64”-re módosult.
2. példa: A Pandas apply() metódus használata
A másik módszer, amelyet a pandák biztosítottak számunkra, a „DataFrame.apply()” függvény, amellyel kategorikus értékeket egész számokká alakíthatunk. Az előző példában megtanultunk egy kategorikus oszlopot egész számmá alakítani. Most látni fogjuk, hogyan alakíthatjuk át a DataFrame összes kategorikus oszlopát int.
A gyakorlati megvalósítástól kezdve importálnunk kell ennek a módszernek a nélkülözhetetlen könyvtárát, a pandákat. Az „import pandas as pd” szkriptet használtuk a pandák importálására a Python fájlunkba a „Spyder” eszközben, amely lehetővé teszi a panda modulok elérését a „pd” használatával. A „pd.DataFrame()” függvényt használtuk egy DataFrame létrehozásához.
Ez a DataFrame négy oszlopból áll: „csoport”, „pozíció”, „pontszámok” és „segítések”. Minden oszlop 9 értéket tárol. A „csoport” oszlop értékei: „X”, „X”, „Y”, „X”, „Y”, „Y”, „Y”, „X” és „Y”. A „pozíció” oszlop 9 értékkel rendelkezik, amelyek a következők: „A”, „C”, „D”, „A”, „C”, „B”, „B”, „D” és „B”. A „pontszámok” oszlop egész számokat tartalmaz: „4”, „8”, „7”, „10”, „9”, „5”, „7”, „3” és „23”. Az utolsó, „segítők” oszlop értéke „10”, „2”, „3”, „9”, „3”, „7”, „4”, „2” és „9”.
Létrehoztunk egy „prog” DataFrame objektumot, és hozzárendeltük a „pd.DataFrame()” metódus meghívásának kimenetét. Tehát a „pd.DataFrame()”-ből generált DataFrame-keret a „prog”-ban lesz tárolva. Most ennek az objektumnak a használatával érhetjük el a DataFrame-et. Ennek a DataFrame-nek a megtekintéséhez a „print()” metódust alkalmaztuk a „prog” DataFrame objektum paraméterével.
Az előző Python program végrehajtásakor egy négy oszlopból álló DataFrame jelenik meg a terminálon.
Több kategorikus oszlop egész számokká alakításához ezt a technikát követtük. Először ki kell jelölnünk az összes olyan oszlopot, amely objektum adattípust tartalmaz a pandák „DataFrame.select_dtypes().columns” metódusával. Amikor szükség szerint használjuk a szkriptünkben, akkor ez „prog.select_dtypes([‘objektum’]).columns” lesz. Kijelöli az összes „object” adattípusú oszlopot a „prog” DataFrame-ben. Létrehoztunk egy „concate_col” változót a metódus kimenetének tárolására. Mostantól az „object” adattípus oszlopokat egyszerűen a „concat_col” változó használatával érhetjük el.
Most, hogy ezeket az oszlopokat egész számokká alakítsuk, a „DataFrame.apply()” pandákat használtuk a „pd.factorize()” metódussal. A DataFrame névvel a „concat_col” változót használtuk, majd az „.apply()” metódus kerül meghívásra. Az „.apply” metódus zárójelében a „pd.factorize()” metódus szerepel, ahol az „x” tetszőleges érték lehet a „prog” DataFrame-ből „object” adattípussal. Így ez az egész kódsor a következőképpen van írva: „prog['concat_col'] = prog['concat_col'].apply(lambda x : pd.factorize(x)[0])”. A faktorizálási metódus értéke egy „objektum” adattípust, és konvertálja „int”-vé. A végső kimenet a “print()” függvény meghívásával jeleníthető meg, a “prog” változó paraméterként való átadásával.
A frissített DataFrame-ben megfigyelhetjük, hogy a „csoport” és a „pozíció” oszlop értéke kezdetben kategorikus, azaz objektum volt. Még mindig a frissített kimeneti DataFrame-ben mindkét oszlop egész számmal rendelkezik. A „csoport” oszlopban az „X” helyett „0”, az „Y” helyett „1” lép. Míg a „pozíció” oszlop „A” helyett „0”, „C” „1”, „D” „2” és „B” helyett „3”.
Most ellenőrizzük a frissített adattípusokat.
Az összes következő oszlop „int64” adattípussal rendelkezik.
Következtetés
Útmutatónk a kategorikus értékek számértékekké alakításáról szól, hogy azokat a gépek érthetővé tegyék, mivel az objektum adattípusát nem tudják feldolgozni. Bemutattuk Önnek a „pandas” könyvtár által kínált két megközelítést a szükséges adattípusok beszerzéséhez. Ezenkívül a „Spyder” eszközön futtatott példakódok gyakorlati megvalósításával megosztottuk az egyes példák eredményét. Végül minden lépést részletesen kidolgoztunk a kívánt eredmény elérése érdekében.