数值列的 pandas <NA> 和 NaN 之间的区别

Difference between pandas <NA> and NaN for numeric columns

提问人:Eugenio.Gastelum96 提问时间:8/2/2023 更新时间:8/2/2023 访问量:51

问:

我有一个充满值的 float64 数据框列,如果我再次将其转换为 float64,它们会被替换为不相同的值。NaN<NA>

我知道值是 ,而值是 ,所以它们是不同的东西。那么,为什么将已经 float64 的列转换为 float64 呢?<NA>pd.NANaNnp.nanNaN<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>

这似乎是两回事。并且 (np.nan) 是 while (pd.NA) 是 nullfloat64Float64NaNfloat64<NA>Float64

这是正确的吗?如果是这样,引擎盖下是什么?

python pandas numpy null na

评论


答:

3赞 Mohammad Zarak 8/2/2023 #1

是的,你是对的。float64Float64 是 pandas 中的两种不同数据类型。不同之处在于,Float64 是一种扩展类型,可以使用特殊的哨兵来保存缺失值,而 float64 是一种原生 numpy 类型,它使用 NaN 来表示缺失值。在后台,Float64 使用带有 dtype 对象的 numpy 数组来存储值,而 float64 使用带有 dtype float64 的 numpy 数组。 这意味着与 float64 相比,Float64 可能会有一些性能开销,但它也允许更一致地处理不同数据类型中的缺失值。

看看这个: Numpy float64 与 Python float