Python 熊猫的pd.NA与np.nan
Python 熊猫的pd.NA与np.nan,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,pd.NAvsnp.nan。熊猫使用哪一种?为什么使用?它们和熊猫的主要优势和劣势是什么 使用这两种方法的一些示例代码: import pandas as pd import numpy as np df = pd.DataFrame({ 'object': ['a', 'b', 'c',pd.NA], 'numeric': [1, 2, np.nan , 4], 'categorical': pd.Categori
pd.NA
vsnp.nan
。熊猫使用哪一种?为什么使用?它们和熊猫的主要优势和劣势是什么
使用这两种方法的一些示例代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({ 'object': ['a', 'b', 'c',pd.NA],
'numeric': [1, 2, np.nan , 4],
'categorical': pd.Categorical(['d', np.nan,'f', 'g'])
})
输出:
| | object | numeric | categorical |
|---:|:---------|----------:|:--------------|
| 0 | a | 1 | d |
| 1 | b | 2 | nan |
| 2 | c | nan | f |
| 3 | <NA> | 4 | g |
| |对象|数字|分类|
|---:|:---------|----------:|:--------------|
|0 | a | 1 | d|
|1 | b | 2 | nan|
|2 | c | nan | f|
|3 | 4 | g|
pd.NA
是在最新版本的中引入的
我建议您在np.nan
上使用它,因为它包含在pandas
库中,它应该最适合数据帧。根据
pd.NA的目标是提供一个可以跨数据类型一致使用的“缺失”指标
因此,如果您有一个包含多个数据类型的列,那么可以使用pd.NA
elsenp.nan
但是,由于pd.NA
似乎具有与np.nan
相同的功能,因此最好将pd.NA
用于所有nan目的
现在只有一个导入到现在为止(的发布版),我真的建议您小心使用它
首先,它仍然是一个实验性的特征:
实验性:pd.NA
的行为仍然可以在没有警告的情况下改变
其次,该行为不同于np.nan
:
与np.nan
相比,pd.NA
在某些操作中表现不同。除了算术运算之外,pd.NA
在比较运算中也作为“缺失”或“未知”传播
两个配额都来自
为了展示其他一些示例,我对插值行为感到惊讶:
创建简单数据帧:
df=pd.DataFrame({“a”:[0,pd.NA,2],“b”:[0,np.nan,2]})
df
#a b
# 0 0 0.0
#1楠
# 2 2 2.0
并尝试插入:
df.interpolate()
#a b
# 0 0 0.0
# 1 1.0
# 2 2 2.0
这其中有一些原因(我仍在发现),无论如何,我只想强调这些差异-这是一个实验特性,在某些情况下,它的行为不同
我认为这将是一个非常有用的特性,但我会非常小心地处理诸如“使用它而不是
np.nan
”之类的语句。在大多数情况下,这可能是正确的,但在您不知道的情况下可能会导致一些问题。pd.NA和np.nan都表示数据帧中缺少值我注意到的主要区别是np.nan是一个浮点值,而pd.NA存储一个整数值。 如果数据集中的column1包含所有整数和一些缺少的值,并且缺少的值被np.nan替换,那么该列的数据类型将变为浮点,因为np.nan是浮点。 但是,如果数据集中的column2包含所有整数和一些缺失值,并且缺失值被pd.NA替换,那么该列的数据类型仍然是整数,因为pd.NA是整数。
如果您希望将任何列保留为int,而不是将其更改为float,那么这可能非常有用。我非常确定pd.NA在后端使用的是np.nan。Pandas倾向于在后端使用numpy。这是什么版本的Pandas?@roganjosh我使用的是Anaconda的v1.0.0。“与np.nan相比,pd.NA在某些运算中表现不同。除了算术运算,pd.NA在@kenan no的比较运算中也作为“缺失”或“未知”传播,在这种情况下,从您的链接来看,
NA
现在似乎是实验性功能,因此对于一些严重的问题,我认为现在应该避免使用。pd.NA
没有完全相同的功能,因此切换时要小心pd.NA
在相等运算中传播,而np.nan
不传播pd.NA==1
产生
,但是np.nan==1
产生False
。从@tdpr提供的数据来看,NA
现在似乎是实验性的特性,所以对于一些严重的问题,我认为现在应该避免。pd.NA
没有完全相同的功能,所以切换时要小心pd.NA
在相等运算中传播,而np.nan
不传播pd.NA==1
产生
,但np.nan==1
产生False
。