Menu
CoddyTech

缺失值

本课属于 Coddy Machine Learning 学习旅程的“数据与图表”单元。第 45 课,共 60 课。

真实数据中会有缺失值:传感器故障,或者有人错过了测验。pandas 会将每个空单元格标记为 NaN,也就是“非数字”:

包含 4 名学生和 2 次测验的表格,其中 3 个空单元格标记为 NaN:Ben 错过了 quiz1,Cy 和 Dee 错过了 quiz2。下方按列统计缺失值:0、1 和 2

大多数模型无法处理 NaN,所以先统计缺失值的数量。.isna() 会将每个缺失值标记为 True,而 .sum() 会统计它们的数量:

scores = pd.DataFrame({
    "name": ["Ana", "Ben", "Cy", "Dee"],
    "quiz1": [8, np.nan, 7, 9],  # np.nan 表示缺失值
    "quiz2": [6, 5, np.nan, np.nan],
})
print(scores.isna().sum())

这会打印:

name     0
quiz1    1
quiz2    2
dtype: int64

然后选择:dropna() 会删除所有有空缺的行;fillna(0) 会在每个空缺处写入 0。两者都会返回一个新表,所以要把它存起来。

统计数据会跳过 NaN:quiz1 的平均值是 8.0,由三个已知分数计算得出。

challenge icon

挑战

中等

健身追踪器在 tracker.csv 中漏掉了一些读数。训练前,看看用不同方式处理缺失值会怎样影响 sleep 的平均值。起始代码会读取填充值 hours。

  1. 打印每列中的缺失值数量。
  2. 用三种方式打印平均睡眠时长,并四舍五入到小数点后 2 位:跳过缺失值,只统计所有列都没有缺失值的日期,以及用 hours 填补缺失值。

使用另一个追踪器和 8 时:

day      0
steps    1
sleep    2
water    0
dtype: int64
Skipping gaps: 6.9
Complete days only: 7.0
Gaps filled with 8.0: 7.21

亲手试试

import pandas as pd

tracker = pd.read_csv("tracker.csv")
hours = float(input())

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

数据与图表中的所有课

自己练习: Python 在线编译器