前言
使用pandas的时候经常需要检测空值,但每次感觉都判断不全或者感觉很困惑,因此这里做个简单的总结
None
None是Python的特殊类型,NoneType对象,它只有一个值None.它不支持任何运算也没有任何内建方法。None和任何其他的数据类型比较永远返回False。None有自己的数据类型NoneType。你可以将None复制给任何变量,但是你不能创建其他NoneType对象。
数据类型
>>>type(None)
<class 'NoneType'>
Nan
python 中Nan是not a number(非数)它即不是无穷大, 也不是无穷小,无穷大减无穷大会导致NaN,无穷大乘以0或无穷小或除以无穷大会导致NaN,有NaN参与的运算, 其结果也一定是NaN,NaN != NaN
数据类型
>>>type(np.nan)
<class 'float'>
Null
空字符串
>>>type('')
<class ''str'>
如何检测
个人感觉最好用的是pd.isnull(或pd.isna)
isnull和isna区别 isnull是isna的别名,既然一样为什么要搞两个名字?Pandas dataframe是根据R的dataframe设计的,而R语言中na和null是两种不同的数据类型,因此有isna和isnull,python就保留了这两个方法,isnull是isna的别名而已;另一方面,pandas是建立在numpy之上的,numpy中又没有na或null值,而是用np.nan来表示缺失值,所以pd.isnull不仅可以检测np.nan也可以检测None
注意 pd.isnull是不可以检测字符串的,比如’’,‘nan’,‘None’。这个也很好理解,字符串有字符串的判断方式。
比较全面的判断这些与空值有关的方法
i == '' or pd.isnull(i) or pd.isnull(float('nan')) (或者 i =='nan') or i =='None'
煮个栗子
list = ['nan', '', 'None', None, np.nan]
for i in list:
if i == '' or pd.isnull(i) or pd.isnull(float('nan')) or i == 'None':
print(i)
结果
nan
None
None
nan
|