现在位置: 首页 > Pandas 教程 > 正文

Pandas pd.isna() 函数

Python math 模块 Pandas 常用函数


pd.isna() 是 Pandas 中最常用的缺失值检测函数,它会检查每个元素是否为缺失值,并返回一个布尔值(TrueFalse)结构。

在数据分析中,缺失值处理是非常重要的第一步。pd.isna() 能帮助你快速识别数据中的缺失位置,为后续的填充、删除或其他处理操作提供依据。


基本语法与参数

语法格式

pandas.isna(obj)

参数说明

参数类型说明
objDataFrame、Series、scalar、list、tuple需要检查缺失值的对象,可以是任意支持的数据类型。

返回值说明

  • 返回与输入结构相同的布尔值对象:
  • 输入是 DataFrame,返回布尔值的 DataFrame
  • 输入是 Series,返回布尔值的 Series
  • 输入是单个值,返回布尔值标量

实例

让我们通过一系列从简单到复杂的例子,彻底掌握 pd.isna() 的用法。

示例 1:检测 Series 中的缺失值

实例

import pandas as pd
import numpy as np

# 创建一个包含缺失值的 Series
s = pd.Series([1, 2, np.nan, 4, None, 6])

# 检测缺失值
result = pd.isna(s)
print("原始 Series:")
print(s)
print("\n检测结果:")
print(result)

运行结果:

原始 Series:
0    1.0
1    2.0
2    NaN
3    4.0
4    NaN
5    6.0
dtype: float64

检测结果:
0    False
1    False
2     True
3    False
4     True
5    False
dtype: bool

代码解析:

  1. np.nanNone 都被识别为缺失值
  2. 返回的布尔 Series 中,缺失值位置为 True,非缺失值位置为 False

示例 2:检测 DataFrame 中的缺失值

实例

import pandas as pd
import numpy as np

# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': ['a', None, 'c', 'd'],
    'C': [pd.NaT, 6, 7, 8]  # NaT 是时间类型的缺失值
})

# 检测缺失值
result = pd.isna(df)
print("原始 DataFrame:")
print(df)
print("\n检测结果:")
print(result)

运行结果:

原始 DataFrame:
     A    B     C
0  1.0    a  None
1  2.0  None     6
2  NaN   c     7
3  4.0    d     8
dtype: object

检测结果:
       A      B      C
0  False  False   True
1  False   True  False
2   True  False  False
3  False  False  False

代码解析:

  • pd.NaT(Not a Time)是时间类型的缺失值,同样被正确识别
  • DataFrame 的每个位置都会返回对应的布尔值

示例 3:统计缺失值数量

在实际数据分析中,我们经常需要知道有多少缺失值。

实例

import pandas as pd
import numpy as np

# 创建数据
df = pd.DataFrame({
    'A': [1, np.nan, 3, np.nan, 5],
    'B': [np.nan, 2, np.nan, 4, np.nan],
    'C': [1, 2, 3, 4, 5]
})

# 统计每列的缺失值数量
print("每列缺失值数量:")
print(pd.isna(df).sum())

print("\n总缺失值数量:", pd.isna(df).sum().sum())

# 计算缺失值比例
print("\n缺失值比例:")
print((pd.isna(df).sum() / len(df) * 100).round(2), "%")

运行结果:

每列缺失值数量:
A    2
B    3
C    0
dtype: int64

总缺失值数量: 5

缺失值比例:
A    40.0
B    60.0
C     0.0
%

示例 4:与其他函数结合使用

实例

import pandas as pd
import numpy as np

# 创建数据
df = pd.DataFrame({
    'name': ['Alice', 'Bob', None, 'Diana', 'Eve'],
    'age': [25, None, 35, 28, None],
    'score': [85, 90, 78, 92, 88]
})

# 使用 isna 筛选出包含缺失值的行
rows_with_na = df[pd.isna(df).any(axis=1)]
print("包含缺失值的行:")
print(rows_with_na)

# 使用 isna 填充缺失值
df_filled = df.fillna({
    'name': 'Unknown',
    'age': df['age'].mean(),  # 用平均值填充年龄
    'score': 0
})
print("\n填充后的 DataFrame:")
print(df_filled)

运行结果:

包含缺失值的行:
   name   age  score
0  Alice  25.0     85
2  None  35.0     78
3  Diana  28.0     92

填充后的 DataFrame:
     name   age  score
0    Alice  25.0     85
1      Bob  29.0     90
2  Unknown  35.0     78
3    Diana  28.0     92
4      Eve   0.0     88

注意事项

重要提示:pd.isna() 会将以下值识别为缺失值:

  • np.nan - 数值型的缺失值
  • None - Python 原生的 None 对象
  • pd.NaT - 时间类型(datetime)的缺失值

对于空字符串 ""0pd.isna() 会返回 False,因为它们不是缺失值。


Python math 模块 Pandas 常用函数