如何检测Python字符串列表中的NaN与空字符串?三种方案分析
检测Python列表中的NaN值与空字符串:问题分析与解决方案
先来看你给出的原始代码(记得要导入依赖库哦):
import numpy as np import pandas as pd 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 == ""):只能精准匹配空字符串"",完全识别不了np.nan——因为np.nan是特殊的浮点缺失值,它和任何值(包括自己)比较都会返回False,所以这个条件对NaN无效。 - 方案2(
pd.isnull(name)):能完美检测np.nan和None这类缺失值,但对空字符串""没反应——pandas的缺失值判断不把空字符串归类为缺失值,所以这个条件漏过了空字符串。 - 方案3(
np.isnan(name)):直接触发报错!np.isnan()的设计只支持数值类型(整数/浮点数),当传入字符串(不管是普通字符串还是空字符串)时,会抛出TypeError: ufunc 'isnan' not supported for the input types,根本没法正常运行。
靠谱的解决办法
我们只需要把空字符串检测和NaN检测的条件结合起来,就能同时覆盖两种情况:
方法1:依赖pandas(简洁直观)
import numpy as np import pandas as pd names=['Pat','Sam', np.nan, 'Tom', ''] for idx, name in enumerate(names): if name == "" or pd.isnull(name): print(idx)
方法2:仅用numpy(不依赖pandas)
如果不想引入pandas,可以先判断类型再用np.isnan():
import numpy as np names=['Pat','Sam', np.nan, 'Tom', ''] for idx, name in enumerate(names): if name == "" or (isinstance(name, float) and np.isnan(name)): print(idx)
这两段代码都会输出2和4,正好对应列表中np.nan和空字符串的索引,完美解决你的需求。
内容的提问来源于stack exchange,提问作者MLKing
相关产品推荐
相关产品推荐

