看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Pandas 1.0 以后引入了一个专门表示缺失值的标量 pd.NA
,它代表空整数、空布尔、空字符,这个功能目前处于实验阶段。
pd.NA 的目标是提供一个“缺失值”指示器,该指示器可以在各种数据类型中一致使用(而不是np.nan,None 或 pd.NaT,具体取决于数据类型)。
它的类型检测:
s = pd.Series([1, 2, None], dtype="Int64")
'''
0 1
1 2
2 <NA>
dtype: Int64
'''
s[2]
# <NA>
s[2] is pd.NA
# True
它是一个缺失值无疑:
pd.isna(pd.NA)
# True
当前(1.0.3版本),pandas 默认尚未使用 NA 数据类型(在创建 DataFrame 或 Series时,或在读取数据时),因此您需要显式指定 dtype。 df.convert_dtypes()
就是一个非常好用的办法。
它各种运算结果还是
# 加法
pd.NA + 1
# <NA>
# 乘法
'a' * pd.NA
# <NA>
pd.NA ** 0
# 1
1 ** pd.NA
# 1
一些比较运算:
pd.NA == 1
# <NA>
pd.NA == pd.NA
# <NA>
pd.NA < 2.5
# <NA>
对于逻辑运算,pd.NA遵循三值逻辑(或Kleene逻辑,类似于R,SQL和Julia)的规则。 此逻辑意味着仅在逻辑上需要时才传播缺失值。
例如,对于逻辑“或”运算(|),如果其中一个操作数为True,则我们已经知道结果将为True,而与其他值无关(因此无论缺失值是True还是False)。 在这种情况下,pd.NA不会传播:
或:
# True:
True | False
# True
True | pd.NA
# True
pd.NA | True
# True
# False:
False | True
# True
False | False
# False
False | pd.NA
# <NA>
与:
False & True
# False
False & False
# False
False & pd.NA
# False
True & True
# True
True & False
# False
True & pd.NA
# <NA>
由于 NA 的实际值是未知的,因此将NA转换为布尔值会引发错误。这样在 if 条件中无法直接做逻辑判断,可以使用 pd.isna(pd.NA) 来判断。当然,预先做好填充值是最好的。
大多数情况下会返回 <NA>
,如:
np.log(pd.NA)
# <NA>
np.add(pd.NA, 1)
# <NA>
更新时间:2021-03-07 14:04:06 标签:pandas 缺失值