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 NaN
weer 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=object
arrays te gebruiken.