行者孙Python

择洗篇-Day9|剔刺除缺:isnull /notnull 检测缺失值

📖 知识点

1. 什么是缺失值?

DataFrame 里的空格,在 pandas 中显示为 NaN(Not a Number),代表 "这个位置没有数据"。可能是录入遗漏、读取空行等造成。

2. isnull ():标记缺失

df.isnull() 返回一张真假表,每个格子判断是否缺失(缺失 = True):

df.isnull()

运行输出:

    菜名   价格   数量
0  False  False  False
1  False  False   True
2  False   True  False

True 表示该位置缺失(是空的)。

3. notnull ():标记非缺失

df.notnull() 与 isnull() 相反,非缺失位置为 True:

df.notnull()

实际应用中,更常用的是统计每列缺了多少。

4. 统计每列缺失数量

# 每列缺失值的总数
df.isnull().sum()

运行输出:

菜名    0
价格    1
数量    1
dtype: int64

.sum() 把 isnull() 的真假表按列求和(True 计 1),得到每列缺失数量。

完整示例

import pandas as pd

data = {
    "菜名": ["白菜", "番茄", "土豆", "黄瓜"],
    "价格": [3, 5, None, 4],
    "数量": [10, 20, 30, None],
}
df = pd.DataFrame(data)

print("===== 原表 =====")
print(df)
print("\n===== isnull 缺失标记 =====")
print(df.isnull())
print("\n===== 每列缺失数量 =====")
print(df.isnull().sum())

💡 理解

  • isnull():缺失位置标 True(真),正常位置标 False
  • notnull():反之,正常位置标 True
  • df.isnull().sum():统计每列缺失数量,最常用
  • 找到缺失后,Day10 再学怎么填 / 怎么删

⚠️ 易错提醒

  1. isnull() 返回的是真假表,不是数字,别直接当结果看
  2. 判断整列是否有缺失:df["价格"].isnull().any()
  3. 缺失值在表里显示为 NaN,注意别和正常数字混淆

⚔️ Kata 实战任务

任务需求:

  1. 导入 pandas,创建一个含缺失值的 DataFrame(菜名、价格、数量,其中两处缺失)
  2. 用 df.isnull() 查看缺失标记
  3. 用 df.notnull() 查看非缺失标记
  4. 用 df.isnull().sum() 统计每列缺失数量
  5. 打印结果,明确哪些列缺了、缺几个

参考代码

import pandas as pd

# 含缺失值的采购清单
data = {
    "菜名": ["白菜", "番茄", "土豆", "黄瓜"],
    "价格": [3, 5, None, 4],
    "数量": [10, 20, 30, None],
}
df = pd.DataFrame(data)

# 剔刺除缺:检测缺失值
print("===== 原表(None显示为NaN)=====")
print(df)

print("\n===== isnull 缺失标记 =====")
print(df.isnull())

print("\n===== notnull 非缺失标记 =====")
print(df.notnull())

print("\n===== 每列缺失数量 =====")
print(df.isnull().sum())

运行输出:

===== 原表(None显示为NaN)=====
   菜名   价格    数量
0  白菜   3.0   10.0
1  番茄   5.0   20.0
2  土豆   NaN   30.0
3  黄瓜   4.0    NaN

===== isnull 缺失标记 =====
    菜名   价格   数量
0  False  False  False
1  False  False  False
2  False   True  False
3  False  False   True

===== notnull 非缺失标记 =====
    菜名   价格   数量
0   True   True   True
1   True   True   True
2   True  False   True
3   True   True  False

===== 每列缺失数量 =====
菜名    0
价格    1
数量    1
dtype: int64

🧠 思考题

  1. df.isnull() 返回的是 "真假表",想得到 "每列缺几个",该怎么组合方法?
  2. 观察到 "价格" 和 "数量" 各缺 1 个,这样的缺失会影响后续算均值吗?你觉得该填充还是删除?
‹ 返回目录
🏠首页 Python 📦资源 👤关于我