Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫的pd.NA与np.nan_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

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
vs
np.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
else
np.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