pandas 缺失值处理
636 字
3 分钟
pandas 缺失值处理
pandas 缺失值处理
在做数据分析时,缺失值是非常常见的问题。比如表格中某些学生没有填写成绩,某些商品没有价格,某些用户没有年龄,这些空值如果不处理,后面的统计结果就可能不准确。
今天记录一下 pandas 中缺失值的常用处理方式。
1、构造一份示例数据
import pandas as pdimport numpy as np
data = { "姓名": ["张三", "李四", "王五", "赵六"], "数学": [85, np.nan, 90, 76], "英语": [88, 92, np.nan, 80], "城市": ["西安", "北京", None, "成都"]}
df = pd.DataFrame(data)print(df)这里的 np.nan 和 None 都可以表示缺失值。
2、检查缺失值
查看每个位置是不是缺失值:
print(df.isna())统计每一列缺失值数量:
print(df.isna().sum())如果只想看哪些列存在缺失值:
print(df.isna().any())这一步一般放在数据分析最开始,用来判断数据质量。
3、删除缺失值
删除包含缺失值的行:
df_drop_row = df.dropna()print(df_drop_row)删除包含缺失值的列:
df_drop_col = df.dropna(axis=1)print(df_drop_col)注意:删除数据虽然简单,但是可能会损失很多信息。如果数据量本来就不大,要谨慎使用。
4、填充缺失值
用固定值填充:
df_fill = df.fillna(0)print(df_fill)对不同列使用不同填充值:
df_fill = df.fillna({ "数学": df["数学"].mean(), "英语": df["英语"].mean(), "城市": "未知"})print(df_fill)这里数学和英语用平均分填充,城市用“未知”填充。
5、前向填充和后向填充
有些数据是时间序列,比如每天的温度、价格,可以使用前一个有效值填充:
df_forward = df.ffill()print(df_forward)也可以使用后一个有效值填充:
df_backward = df.bfill()print(df_backward)这种方式适合连续性比较强的数据,不适合随便填所有表格。
6、一个完整的小案例
import pandas as pdimport numpy as np
data = { "姓名": ["张三", "李四", "王五", "赵六"], "数学": [85, np.nan, 90, 76], "英语": [88, 92, np.nan, 80]}
df = pd.DataFrame(data)
# 查看缺失情况print(df.isna().sum())
# 用每列平均值填充分数score_cols = ["数学", "英语"]df[score_cols] = df[score_cols].fillna(df[score_cols].mean())
# 计算总分和平均分df["总分"] = df[score_cols].sum(axis=1)df["平均分"] = df[score_cols].mean(axis=1)
print(df)总结
缺失值处理没有固定答案,一般按照下面的思路来:
先检查缺失情况 -> 判断缺失原因 -> 决定删除还是填充 -> 再做统计分析如果是学习阶段,先掌握 isna()、dropna()、fillna() 这几个方法,基本就能处理大部分简单表格了。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!













