numpy pandas< NA>和NaN在数值列上的区别

zed5wv10  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个 Dataframe 列float64,里面充满了NaN值,如果我再次将其转换为float64,它们就会被不同的<NA>值所取代。
我知道<NA>的值是pd.NA,而NaN的值是np.nan,所以它们是不同的东西。那么,为什么要将一个已经是float64的列强制转换为float64,将NaN改为<Na>呢?
下面是一个例子:

df=pd.DataFrame({'a':[1.0,2.0]})
print(df.dtypes)
#output is: float64

df['a'] = np.nan
print(df.dtypes)
# output is float64

print(df)
    a
0   NaN
1   NaN

#Now, lets cast that float64 to float 64
df3['a']=df3['a'].astype(pd.Float64DType())
print(df3.dtypes)
#output is Float64, notice it's uppercase F this time, previously it was lowercase

print(df3)

    a
0   <NA>
1   <NA>

字符串
float64Float64似乎是两个不同的东西。并且NaN(np.nan)是float64的空值,而<NA>(pd.NA)是Float64的空值
是这样吗?如果是的话,引擎盖下面是什么?

5ssjco0h

5ssjco0h1#

是的,你说得对。float64Float64是pandas中两种不同的数据类型。不同之处在于,Float64是一个扩展类型,可以使用特殊的sentinel来保存缺失值,而float64是一个原生的numpy类型,使用NaN来表示缺失值。在底层,Float64使用dtypeobject的numpy数组来存储值,而float64使用dtypefloat64的numpy数组。这意味着与float64相比,float64可能会有一些性能开销,但它也允许在不同数据类型之间更一致地处理缺失值。
看看这个Numpy float64 vs Python float

相关问题