Pandas 缺失值检测:isnull、isna、notnull、notna

  • 2025-03-20
  • dfer
  • 23

isnull()isna()notnull()notna() 是在数据处理中常用的方法,尤其是在处理 Pandas 数据库时,它们主要用于快速定位和识别缺失值(NaN)。

一、基础

这4个函数均为Pandas的布尔检测方法,返回与原始数据形状相同的布尔值对象(True / False):
isnull()isna():检测缺失值,返回True表示对应位置为缺失值。
notnull()notna():检测非缺失值,返回True表示对应位置有有效数据。

二、详解

  1. isnull()isna()
    • 功能:二者功能完全一致,isna()isnull()的别名,都用于检测数据中的缺失值。如果某个位置是缺失值(NaN),返回 True;否则返回 False
    • 返回值:返回一个与原数据形状相同的布尔型数据结构(如布尔型 DataFrame 或布尔型 Series),其中每个元素表示对应位置是否为缺失值。
    • 检测范围:识别NaN、None、NaT(时间缺失值)

      import pandas as pd
      import numpy as np
      
      df = pd.DataFrame({
          'A': [1, np.nan, 3],
          'B': [4, 5, np.nan]
      })
      
      print(df.isnull())  # 或 df.isna()
      

      输出:

          A      B
      0  False  False
      1   True  False
      2  False   True
      

np.nan 是 Python 中表示“非数字”(Not a Number)的特殊浮点数值,通常用于表示缺失或未定义的数据。它属于 NumPy 库的一部分,因此在使用时需要导入 NumPy 库,或者在引用时加上 np. 前缀,其中 np 通常是 NumPy 库的别名。

print(df)

输出

         A      B
    0  1.0  4.0
    1  NaN  5.0
    2  3.0  NaN

  1. notnull()notna()
    • 功能:功能相同,二者互为别名,用于检测数据中非缺失值。如果某个位置是非缺失值,返回 True;否则返回 False
    • 返回值:返回一个与原数据形状相同的布尔型数据结构,其中每个元素表示对应位置是否为非缺失值。
      print(df.notnull())  # 或 df.notna()
      
      输出:
          A      B
      0   True   True
      1  False   True
      2   True  False
      

三、对比

函数对 关系 使用场景
isnull() vs isna() 完全等价 根据习惯选择(R用户倾向isna()
notnull() vs notna() 完全等价 同上
isnull() vs notnull() 结果互为取反 根据逻辑需求选择正向或反向检测

四、常见问题解答

Q1:为什么需要两对功能相同的函数?
A1:为兼容不同编程习惯。isnull() 的命名来源于 SQL 中的 IS NULL 语法;isna() 的命名是为了与 R 语言中的 is.na() 函数保持一致。
Pandas 官方文档明确指出:二者是同一函数的两个名称,功能完全相同。

Q2:如何检测非数值型缺失值(如字符串)?
A2:Pandas中字符串列通常用None表示缺失,isnull()可直接检测。但需注意,np.nan在字符串列中会被自动转换为None。

Q3:这些函数能检测自定义缺失标识吗?
A3:不能直接识别(如用-999表示缺失)。需先用replace()替换为NaN,再使用这些函数检测。

五、总结

  • isnull()isna():功能完全相同,都用于检测缺失值,返回布尔值,表示每个位置是否为缺失值。
  • notnull()notna():功能完全相同,都用于检测非缺失值,返回布尔值,表示每个位置是否为非缺失值。