如何检查nan和空字符串

时间:2018-04-19 04:25:53

标签: python string nan

我试图在Python字符串列表中找到所有NaNs和空字符串(即“”)。请参阅以下代码,其中包含3个选项:

names=['Pat','Sam', np.nan, 'Tom', '']
for idx,name in enumerate(names):
    if name=='':        #Option 1 
    if pd.isnull(name): #Option 2
    if np.isnan(name):  #Option 3 
        print(idx)

选项1:此检查,name =“”,未捕获NaN

选项2:此检查,pd.isnull(name)不捕获空字符串

选项3:此检查,np.isnan(name)在字符串上给出以下错误(例如“Pat”)。

----> 6如果是np.isnan(名字):

  

TypeError:输入类型不支持ufunc'isnan',而且   输入无法安全地强制转换为任何支持的类型   施法规则''safe *''*

问题:是否有任何函数/方法可以检查空字符串NaN并且遇到字符串时不会出错?

2 个答案:

答案 0 :(得分:3)

只需使用两个

>>> names=['Pat','Sam', np.nan, 'Tom', '']
>>> for idx,name in enumerate(names):
...     if name == '' or pd.isnull(name):
...         print(idx)
...
2
4

然而,意识到:

>>> pd.isnull(None)
True

因此,如果您要专门针对NaN 而不是None检查,请使用math.isnan(同时防止传递非float值到math.isnan

>>> import math
>>> for idx,name in enumerate(names):
...     if name == '' or (isinstance(name, float) and  math.isnan(name)):
...         print(idx)
...
2
4

答案 1 :(得分:1)

有一种方法可以将选项#1和#2结合起来,得到你想要的结果:

names = ['Pat', 'Sam', np.nan, 'Tom', '']
for idx, name in enumerate(names):
    if not name or pd.isnull(name):
        print(idx)