空值判断:Nan、None、NaT、Null、空字符串

常见问题:在数据分析过程中难免会遇到数据缺失的情况,其对象可能是单个变量或是整体的series、Dataframe,下面就来讨论下具体的几种情况:

dt.dtypes
#运行结果:
idcard            object
sex              float64
cap               object
time      datetime64[ns]
dtype: object
idcard sex cap time
0 01231 1.0 教学部 NaT
1 01232 0.0 教务部 2010-03-06
2 None NaN 2021-03-09

对整体的series或Dataframe判断是否未空,用isnull()或isna(),不适用于空字符串

print(len(dt[dt['idcard'].isnull()]))
print(len(dt[dt['sex'].isnull()]))
print(len(dt[dt['cap'].isnull()]))
print(len(dt[dt['time'].isnull()]))

#运行结果
1
1
0
1

print(len(dt[dt['idcard'].isna()]))
print(len(dt[dt['sex'].isna()]))
print(len(dt[dt['cap'].isna()]))
print(len(dt[dt['time'].isna()]))

#运行结果
1
1
0
1

NaN

NaN是numpy\pandas下的,不是Python原生的,Not a Number的简称。

数据类型是float

from numpy import NaN
print(type(NaN))#float

对单独的某个值判断,可以用 np.isnan()

for i in range(len(dt)):
    print(np.isnan(dt.loc[i,'sex']))
#运行结果:
False
False
True

None

None是一个python特殊的数据类型,None不同于空列表和空字符串,是一种单独的格式。

print(type(None))
#运行结果
NoneType

对于单独的某个值判断,可以用is None、not()(bool类型值不适用)

for i in range(len(dt)):
    print(not(dt.loc[i,'idcard']))
#运行结果:
False
False
True

for i in range(len(dt)):
    print(dt.loc[i,'idcard'] is None)
#运行结果:
False
False
True

NaT

非时间空值,Not a Time.

该值可以存储在 datetime 数组中以指示未知或缺失的 datetime 值。NaT 返回一个 (NaT) datetime 非时间标量值。

Null

在Python中没有这个NULL,NULL主要是在C语言中,在Python中对应的就是None

空字符,数据类型是字符串

空字符串

对单独的某个值判断,可以用len()、not()(bool类型值不适用)

for i in range(len(dt)):
    print(not(dt.loc[i,'cap']))
#运行结果:
False
False
True

for i in range(len(dt)):
    print(dt.loc[i,'cap'] is None)
#运行结果:
False
False
True