我有一个数据框列作为 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>
看起来
float64
和Float64
是两个不同的东西。 NaN
(np.nan) 是 float64
的空值,而 <NA>
(pd.NA) 是 Float64
的空值
这是正确的吗?如果是这样,幕后是什么?
是的,你是对的。 float64 和 Float64 是 pandas 中两种不同的数据类型。区别在于 Float64 是一种扩展类型,可以使用特殊的 标记来保存缺失值,而 float64 是一种原生 numpy 类型,使用 NaN 来表示缺失值。在底层,Float64使用dtype为object的numpy数组来存储值,而float64使用dtype为float64的numpy数组。 这意味着与 float64 相比,Float64 可能会产生一些性能开销,但它也允许对不同数据类型之间的缺失值进行更一致的处理。