pandas <NA> 和 NaN 对于数字列的区别

问题描述 投票:0回答:1

我有一个数据框列作为 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

的空值

这是正确的吗?如果是这样,幕后是什么?

python pandas numpy null na
1个回答
2
投票

是的,你是对的。 float64Float64 是 pandas 中两种不同的数据类型。区别在于 Float64 是一种扩展类型,可以使用特殊的 标记来保存缺失值,而 float64 是一种原生 numpy 类型,使用 NaN 来表示缺失值。在底层,Float64使用dtype为object的numpy数组来存储值,而float64使用dtype为float64的numpy数组。 这意味着与 float64 相比,Float64 可能会产生一些性能开销,但它也允许对不同数据类型之间的缺失值进行更一致的处理。

看看这个:Numpy float64 与 Python float

© www.soinside.com 2019 - 2024. All rights reserved.