Fout: kan float NaN niet converteren naar geheel getal in panda’s

Ik heb het dataframe:

  a            b     c      d
0 nan           Y     nan   nan
1  1.27838e+06  N      3     96
2 nan           N      2    nan
3  284633       Y     nan    44

Ik probeer de gegevens die niet nul zijn, te veranderen in een geheel getal om exponentiële gegevens te vermijden (1.27838e+06):

f=lambda x : int(x)
df['a']=np.where(df['a']==None,np.nan,df['a'].apply(f))

Maar ik krijg ook een fout, ik dacht dat ik het dtype van de niet-null-waarde wil wijzigen, kan iemand mijn fout aangeven? bedankt


Antwoord 1, autoriteit 100%

Pandas heeft niet de mogelijkheid om sla NaN-waarden op voor gehele getallen. Strikt genomen zou u een kolom met gemengde gegevenstypen kunnen hebben, maar dit kan rekenkundig inefficiënt zijn. Dus als je erop staat, kun je dat doen

df['a'] = df['a'].astype('O')
df.loc[df['a'].notnull(), 'a'] = df.loc[df['a'].notnull(), 'a'].astype(int)

Antwoord 2, autoriteit 17%

Voor zover ik heb gelezen in de panda’s documentatie, het is niet mogelijk om een geheel getal NaNweer te geven:

“Bij gebrek aan krachtige NA-ondersteuning die vanaf de basis in NumPy is ingebouwd, is het primaire slachtoffer de mogelijkheid om NA’s in integer-arrays weer te geven.”

Zoals later wordt uitgelegd, is dit vanwege geheugen- en prestatieredenen, en ook omdat de resulterende serie “numeriek” blijft. Een mogelijkheid is om in plaats daarvan dtype=objectarrays te gebruiken.

Other episodes