缺失值标记
使用python时,对缺失值的标记主要有3种:np.nan,None,pd.NA(注意大小写)。
pd.NA
pandas1.0以后的版本中引入了一个专门表示缺失值的标量pd.NA,它代表空整数、空布尔值、空字符。目标是提供一个缺失值指示器,可以在各种数据类型中一致使用(而不是np.nan、None或者NaT分情况使用),不会改变原有数据类型。
np.nan
用于数学或科学计算。
None
则更通用,表示缺少数据。
向pandas传入数据后,不论各列是什么数据类型,缺失值全被置为np.nan。
但是!!
若缺失值明确给出类型为pd.NA或None,则不会被置为np.nan。
df_result = pd.DataFrame([
{'country': 'US', 'value': 100.00, 'id': 'a'},
{'country': 'US', 'value': 95.00, 'id': 'b'},
{'country': 'CA', 'value': 60.00, 'id': 'y'},
{'country': 'CA', 'value': 60.00, 'id': 'z'},
{'country': 'CA', 'id': 'z'},
{'country': 'qq', 'value':None , 'id': 'z'},
{'country': 'CA', 'value': pd.NA , 'id': 'z'},
])
df_result
缺失值判断
“==”或“is”
使用“==”或“is”进行判断的结果如下:
np.nan == np.nan,返回False;
np.nan is np.nan,返回True;
None == None,返回True;
None is None,返回True;
pd.NA == pd.NA,返回;
pd.NA is pd.NA,返回True;
np.isnan()
np.isnan 主要用于检测浮点数数组中的NaN(np.nan或None)值,不适用于其他数据类型。
注意!!
1.NumPy的是isnan()函数,NumPy没有isna()。
2.np.isnan()不能用于判断None类型。
3.而且没有df_result[‘value’][3].isnan()这种用法。
print(np.isnan(df_result['value'][3]))
print(np.isnan(df_result['value'][4]))
print(np.isnan(df_result['value'][6]))
np.isnan(np.nan)为True;np.isnan(None)报错;np.isnan(pd.NA)为 < NA > 。
pd.isna()或pd.isnull()
pd.isna()和pd.isnull()可对series和dataframe中的元素识别np.nan,但不能对某个元素进行判断,因为定位到元素时,是一个numpy对象,不再是pandas对象。
pd.isna(np.nan),pd.isna(None),pd.isna(pd.NA),均为True。
pd.isnull(np.nan),pd.isnull(None),pd.isnull(pd.NA),均为True。
参考文档
Pandas 缺失数据处理大全(附代码)
【NumPy】深入解析numpy中的isnan方法
4种检测Python缺失值的方法