wijzig kolomtype in panda’ s

u hebt vier hoofdopties voor het converteren van typen in panda ‘ s:

Lees verder voor meer gedetailleerde uitleg en gebruik van elk van deze methoden.

de beste manier om een of meer kolommen van een DataFrame naar numerieke waarden te converteren is door pandas.to_numeric()te gebruiken.

Deze functie zal proberen om niet-numerieke objecten (zoals tekenreeksen) te veranderen in gehele getallen of drijvende komma getallen.

basisgebruik

De invoer naar to_numeric() is een reeks of een enkele kolom van een DataFrame.,

zoals u kunt zien, wordt een nieuwe reeks teruggegeven. Vergeet niet om deze uitvoer toe te wijzen aan een variabele of kolomnaam om het te blijven gebruiken:

# convert Seriesmy_series = pd.to_numeric(my_series)# convert column "a" of a DataFramedf = pd.to_numeric(df)

u kunt het ook gebruiken om meerdere kolommen van een DataFrame te converteren via de apply() methode:

zolang uw waarden allemaal geconverteerd kunnen worden, is dat waarschijnlijk alles wat u nodig hebt.

foutafhandeling

maar wat als sommige waarden niet naar een numeriek type kunnen worden geconverteerd?,

to_numeric() neemt ook een errors sleutelwoordargument dat u toelaat om niet-numerieke waarden te forceren om NaN te zijn, of gewoon kolommen met deze waarden te negeren.

Hier is een voorbeeld met behulp van een reeks strings s die het object dtype heeft:

>>> s = pd.Series()>>> s0 11 22 4.73 pandas4 10dtype: object

het standaard gedrag is om te verhogen als het een waarde niet kan converteren., In dit geval kan het niet omgaan met de tekenreeks ‘panda’s’:

>>> pd.to_numeric(s) # or pd.to_numeric(s, errors='raise')ValueError: Unable to parse string

in plaats van falen, we willen misschien dat’ Panda ‘ wordt beschouwd als een ontbrekende/slechte numerieke waarde., We kunnen dwingen ongeldige waarden NaN als volgt met behulp van de errors trefwoord argument:

>>> pd.to_numeric(s, errors='coerce')0 1.01 2.02 4.73 NaN4 10.0dtype: float64

De derde optie voor: errors gewoon te negeren de operatie als u een ongeldige waarde is opgetreden:

>>> pd.to_numeric(s, errors='ignore')# the original Series is returned untouched

Deze laatste optie is vooral handig wanneer u wilt converteren uw gehele DataFrame, maar niet weten welke van onze kolommen kunnen worden omgezet betrouwbaar om een numeriek type., In dat geval gewoon schrijven:

df.apply(pd.to_numeric, errors='ignore')

De functie zal worden toegepast op elke kolom van het DataFrame. Kolommen die kunnen worden geconverteerd naar een numeriek type zullen worden geconverteerd, terwijl kolommen die niet kunnen (bijvoorbeeld ze bevatten niet-cijferreeksen of datums) met rust worden gelaten.

Downcasting

standaard geeft conversie met to_numeric() u ofwel een int64 of float64 dtype (of welke gehele breedte dan ook is native op uw platform).,

dat is meestal wat u wilt, maar wat als u wat geheugen wilt opslaan en een compacter dtype wilt gebruiken, zoals float32, of int8?

>>> s = pd.Series()>>> s0 11 22 -7dtype: int64

Downcasting aan ‘integer’ gebruikt de kleinst mogelijke getal dat kan de waarden:

>>> pd.to_numeric(s, downcast='integer')0 11 22 -7dtype: int8

Downcasting te ‘drijven’ op dezelfde manier neemt een kleiner dan normaal drijvende type:

>>> pd.to_numeric(s, downcast='float')0 1.01 2.02 -7.0dtype: float32

astype()

De astype() methode stelt u in staat om expliciet te zijn over de dtype u wilt uw DataFrame of Serie te hebben., Het is zeer veelzijdig in dat je kunt proberen en gaan van het ene type naar het andere.

basisgebruik

roep de methode aan op het object dat u wilt converteren en astype() zal het voor u proberen te converteren:

merk op dat ik “try” zei – Als astype() niet weet hoe een waarde in de reeks of DataFrame moet worden geconverteerd, zal er een fout ontstaan. Als u bijvoorbeeld een NaN of inf waarde hebt, krijgt u een fout wanneer u probeert deze naar een geheel getal te converteren.

vanaf panda ‘ s 0,20.,0, Deze fout kan worden onderdrukt door errors='ignore'te geven. Je oorspronkelijke object zal onaangeroerd terugkeren.

wees voorzichtig

astype() is krachtig, maar het zal soms waarden “onjuist”omzetten. Bijvoorbeeld:

>>> s = pd.Series()>>> s0 11 22 -7dtype: int64

Dit zijn kleine gehele getallen, dus hoe zit het met het converteren naar een niet-ondertekend 8-bits type om geheugen te besparen?

>>> s.astype(np.uint8)0 11 22 249dtype: uint8

de conversie werkte, maar de -7 werd omwikkeld tot 249 (d.w.z. 28 – 7)!

proberen te downcast met pd.to_numeric(s, downcast='unsigned') in plaats daarvan zou kunnen helpen deze fout te voorkomen.,

infer_objects ()

versie 0.21.0 van Panda ‘ s introduceerde de methode infer_objects() Voor het converteren van kolommen van een DataFrame die een object datatype hebben naar een specifieker type (zachte conversies).

bijvoorbeeld, hier is een DataFrame met twee kolommen van objecttype. De ene bevat werkelijke gehele getallen en de andere bevat tekenreeksen die gehele getallen vertegenwoordigen:

>>> df = pd.DataFrame({'a': , 'b': }, dtype='object')>>> df.dtypesa objectb objectdtype: object

met infer_objects() kunt u het type kolom ‘A’ wijzigen in int64:

>>> df = df.infer_objects()>>> df.dtypesa int64b objectdtype: object

kolom ‘b’ is met rust gelaten omdat de waarden tekenreeksen waren, geen gehele getallen., Als u de conversie van beide kolommen naar een integer type wilt forceren, kunt u df.astype(int) gebruiken.

convert_dtypes ()

Versie 1.0 en hoger bevat een methode convert_dtypes() om reeksen en Dataframekolommen om te zetten naar het best mogelijke dtype dat de ontbrekende waarde pd.NA ondersteunt.

hier betekent “best possible” het type dat het meest geschikt is om de waarden vast te houden., Dit is bijvoorbeeld een panda ‘ s integer type als alle waarden gehele getallen zijn( of ontbrekende waarden): een objectkolom met Python integer objecten wordt geconverteerd naar Int64, Een kolom met NumPy int32 waarden worden de panda ‘ s dtype Int32.,

Met de object DataFrame df, krijgen we het volgende resultaat:

>>> df.convert_dtypes().dtypes a Int64b stringdtype: object

Aangezien de kolom ‘a’ gehouden integer waarden, werd het omgebouwd tot de Int64 type (die is in staat met ontbrekende waarden, in tegenstelling tot int64).

kolom ‘b’ bevatte stringobjecten, dus werd gewijzigd in panda ‘ s ‘ string dtype.

standaard zal deze methode het type afleiden uit objectwaarden in elke kolom., We kunnen dit veranderen door infer_objects=False:

>>> df.convert_dtypes(infer_objects=False).dtypes a objectb stringdtype: object

nu kolom ‘ a ‘ bleef een object kolom: pandas weet dat het kan worden beschreven als een ‘integer’ kolom (intern liep het infer_dtype) maar leidde niet exact af welk dtype van integer het had moeten hebben dus niet geconverteerd. Kolom ‘ b ‘werd opnieuw geconverteerd naar’ string ‘dtype omdat het werd herkend als het vasthouden van’ string ‘ waarden.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *