You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:54:40