我有数据框:
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
我尝试将非零数据更改为整数类型以避免指数数据(1.27838e + 06):
f=lambda x : int(x)
df['a']=np.where(df['a']==None,np.nan,df['a'].apply(f))
但我得到错误也事件以为我希望更改非null值的dtype,任何人都可以指出我的错误?感谢
答案 0 :(得分:2)
Pandas doesn't have the ability to store NaN values for integers。严格地说,您可以使用具有混合数据类型的列,但这可能在计算上效率低下。所以,如果你坚持,你可以做到
df['a'] = df['a'].astype('O')
df.loc[df['a'].notnull(), 'a'] = df.loc[df['a'].notnull(), 'a'].astype(int)
答案 1 :(得分:1)
据我在pandas documentation中读到,无法表示整数NaN
:
“在没有从头开始构建NumPy的高性能NA支持的情况下,主要的伤亡是能够在整数数组中表示NA。”
正如后面所解释的那样,这是由于内存和性能原因造成的,并且最终的系列仍然是“数字”。一种可能性是使用dtype=object
数组。