我有一个 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>
字符串float64
和Float64
似乎是两个不同的东西。并且NaN
(np.nan)是float64
的空值,而<NA>
(pd.NA)是Float64
的空值
是这样吗?如果是的话,引擎盖下面是什么?
1条答案
按热度按时间5ssjco0h1#
是的,你说得对。float64和Float64是pandas中两种不同的数据类型。不同之处在于,Float64是一个扩展类型,可以使用特殊的sentinel来保存缺失值,而float64是一个原生的numpy类型,使用NaN来表示缺失值。在底层,Float64使用dtypeobject的numpy数组来存储值,而float64使用dtypefloat64的numpy数组。这意味着与float64相比,float64可能会有一些性能开销,但它也允许在不同数据类型之间更一致地处理缺失值。
看看这个Numpy float64 vs Python float