Muutos-sarake tyyppi pandoja

on neljä päävaihtoehtoa muuntaa tyypit pandoja:

Lue lisää yksityiskohtaisia selityksiä ja käyttö jokainen näistä menetelmät.

paras tapa muuntaa yksi tai useampia sarakkeita on DataFrame, jotta numeeriset arvot on käyttää pandas.to_numeric().

Tämän toiminnon yrittää muuttaa ei-numeerinen esineitä (kuten jouset) osaksi kokonaislukuja tai liukulukuja tarvittaessa.

peruskäyttö

tulo to_numeric() on useita tai yhden sarakkeen DataFrame.,

kuten näet, uusi sarja palautetaan. Muista antaa tämä output-muuttujaan tai sarakkeen nimeä, jos haluat edelleen käyttää sitä:

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

Voit myös käyttää sitä muuntaa useita sarakkeita on DataFrame kautta apply() menetelmä:

Niin kauan kuin arvot kaikki voidaan muuntaa, se on luultavasti kaikki mitä tarvitset.

virheenkäsittely

mutta entä jos joitakin arvoja ei voida muuntaa numeeriseksi tyypiksi?,

to_numeric() ottaa myös errors avainsana argumentti, jonka avulla voit pakottaa ei-numeerisia arvoja NaN, tai yksinkertaisesti sivuuttaa sarakkeet sisältävät nämä arvot.

Tässä on esimerkki käyttäen Sarja jousille s, joka on esine dtype:

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

oletuksena käyttäytymistä on nostaa, jos se voi muuntaa arvo., Tässä tapauksessa, se voi selviytyä string ’panda’:

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

sen Sijaan onnistu, haluamme ehkä ’panda’ pidettävä puuttuu/huono numeerinen arvo., Emme voi pakottaa virheellinen arvot NaN seuraavasti käyttäen errors avainsana argumentti:

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

kolmas vaihtoehto errors on vain sivuuttaa toiminta jos virheellinen arvo on kohdannut:

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

Tämä viimeinen vaihtoehto on erityisen hyödyllinen, kun haluat muuntaa koko DataFrame, mutta en tiedä, mikä meidän sarakkeet voidaan muuntaa luotettavasti numeerinen tyyppi., Siinä tapauksessa kirjoita vain:

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

– toimintoa käytetään kunkin sarakkeen DataFrame. Sarakkeet, jotka voidaan muuntaa numeerinen tyyppi muunnetaan, kun taas sarakkeita, joita ei (esim. ne sisältävät ei-numeroinen jouset tai päivämäärät) jää yksin.

Downcasting

oletuksena, muuntaminen to_numeric() antaa joko int64 tai float64 dtype (tai mikä tahansa kokonaisluku leveys on kotoisin platform).,

Se on yleensä mitä haluat, mutta mitä jos halusi säästää muistia ja käyttää enemmän kompakti dtype, kuten float32 tai int8?

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

Downcasting että ’kokonaisluku’ käyttää pienin mahdollinen kokonaisluku, joka voi olla arvot:

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

Downcasting että ’float’ samoin poimii pienempi kuin normaali kelluva tyyppi:

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

astype()

astype() menetelmä avulla voit olla selkeästi siitä, että dtype haluat DataFrame tai Sarja on., Se on hyvin monipuolinen siinä mielessä, että voi yrittää mennä yhdeltä tyypiltä toiselle.

peruskäyttö

Soittaa menetelmä on objekti, jonka haluat muuntaa ja astype() yrittää muuntaa sen sinulle:

Huomaa, sanoin ”kokeile” – jos astype() ei tiedä, miten muuntaa arvo Sarja tai DataFrame, se nostaa virheilmoituksen. Esimerkiksi, jos sinulla on NaN tai inf arvo saat virheilmoituksen, yrittää muuntaa sen kokonaisluvuksi.

pandojen kohdalla 0,20.,0, tämä virhe voidaan tukahduttaa syöttämällä errors='ignore'. Alkuperäinen esineesi palaa koskemattomana.

Ole varovainen,

astype() on voimakas, mutta se on joskus muuntaa arvot ”väärin”. Esimerkiksi:

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

Nämä ovat pieniä kokonaislukuja, niin miten muuntaa unsigned 8-bittinen tyyppi säästää muistia?

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

muuntaminen toimi, mutta -7 oli kääritty kierroksella tulla 249 (eli 28 – 7)!

yrittämällä downcast käyttäen pd.to_numeric(s, downcast='unsigned') sen sijaan voisi auttaa estämään tämän virheen.,

infer_objects()

Versio 0.21.0 pandoja käyttöön menetelmä infer_objects() muuntaa sarakkeet DataFrame, jotka ovat objektin tietotyyppi on tarkempi tyyppi (pehmeä konversioita).

esimerkiksi tässä DataFrame, jossa on kaksi objektityypin saraketta. Yksi omistaa todellinen kokonaislukuja ja muut pitää jouset edustaa kokonaislukua:

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

Käyttäen infer_objects(), voit muuttaa tyyppiä sarakkeessa ” a ” – int64:

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

– Sarakkeessa ” b ” on jätetty yksin, koska sen arvot olivat jouset, ei kokonaislukuja., Jos halusi yrittää pakottaa molempien sarakkeiden muuntamisen kokonaislukutyypiksi, voisi sen sijaan käyttää df.astype(int).

convert_dtypes()

Versio 1.0 ja edellä sisältää menetelmä convert_dtypes() muuntaa Sarja ja DataFrame sarakkeet paras mahdollinen dtype, joka tukee pd.NA puuttuva arvo.

tässä ”paras mahdollinen” tarkoittaa tyyppiä, joka soveltuu parhaiten arvojen pitämiseen., Esimerkiksi, tämä pandoja kokonaisluku tyyppi, jos kaikki arvot ovat kokonaislukuja (tai puuttuvat arvot): kohde-sarakkeessa Python kokonaisluku objektit muunnetaan Int64 sarakkeessa NumPy int32 arvot tulee pandoja dtype Int32.,

meidän object DataFrame df, saamme seuraavan tuloksen:

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

Koska sarakkeessa ” a ” järjestetään kokonaisluku arvoja, se oli muunnetaan Int64 tyyppi (joka pystyy pitämään puuttuvat arvot, toisin kuin int64).

– Sarakkeessa ” b ”sisältämät string-olioita, joten oli muuttunut pandas’ string dtype.

oletuksena tämä menetelmä määrittää tyypin kunkin sarakkeen objektiarvoista., Voimme muuttaa tätä johtamalla infer_objects=False:

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

Nyt sarakkeessa ” a ” jäi kohde-sarake: pandoja tietää, että se voidaan kuvata ’kokonaisluku’ sarake (sisäisesti se juoksi infer_dtype), mutta ei voi päätellä, mitä dtype kokonaisluku sen pitäisi olla niin ei muuntaa se. Sarake ” b ”muutettiin jälleen” string ”dtypeksi, koska sillä todettiin olevan ”string” – arvot.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *