📖 知识点
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(真),正常位置标 Falsenotnull():反之,正常位置标 Truedf.isnull().sum():统计每列缺失数量,最常用- 找到缺失后,Day10 再学怎么填 / 怎么删
⚠️ 易错提醒
isnull()返回的是真假表,不是数字,别直接当结果看- 判断整列是否有缺失:
df["价格"].isnull().any()- 缺失值在表里显示为
NaN,注意别和正常数字混淆
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一个含缺失值的 DataFrame(菜名、价格、数量,其中两处缺失)
- 用
df.isnull()查看缺失标记 - 用
df.notnull()查看非缺失标记 - 用
df.isnull().sum()统计每列缺失数量 - 打印结果,明确哪些列缺了、缺几个
参考代码
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
🧠 思考题
df.isnull()返回的是 "真假表",想得到 "每列缺几个",该怎么组合方法?- 观察到 "价格" 和 "数量" 各缺 1 个,这样的缺失会影响后续算均值吗?你觉得该填充还是删除?