我试图在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
并且遇到字符串时不会出错?
答案 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)