缺失值
本课属于 Coddy Machine Learning 学习旅程的“数据与图表”单元。第 45 课,共 60 课。
真实数据中会有缺失值:传感器故障,或者有人错过了测验。pandas 会将每个空单元格标记为 NaN,也就是“非数字”:
大多数模型无法处理 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,由三个已知分数计算得出。
挑战
中等健身追踪器在 tracker.csv 中漏掉了一些读数。训练前,看看用不同方式处理缺失值会怎样影响 sleep 的平均值。起始代码会读取填充值 hours。
- 打印每列中的缺失值数量。
- 用三种方式打印平均睡眠时长,并四舍五入到小数点后 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())
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
数据与图表中的所有课
自己练习: Python 在线编译器