当前位置:首页>python>Python:Pandas 缺失值深度处理 + 缺失模式分析与智能填充

Python:Pandas 缺失值深度处理 + 缺失模式分析与智能填充

  • 2026-10-11 07:17:28
Python:Pandas 缺失值深度处理 + 缺失模式分析与智能填充
原始业务数据普遍存在空值,直接删除会丢失有效信息,不同场景需差异化填充、标记、剔除,本篇覆盖工业级缺失值全套处理方案。
场景:用户消费数据表存在年龄、消费金额、备注等不同类型缺失值,完成缺失统计、分类填充、缺失标记。核心知识点:缺失值统计、fillna多策略填充、ffill/bfill前后填充、分组聚合填充、缺失状态标记。

① 字段含义说明

② 生成测试数据

import pandas as pdimport numpy as np# 构造含缺失值数据集:pay_time 保证无空值df = pd.DataFrame({    "user_id": range(1, 101),    "age": np.random.choice([np.nan] + list(range(18, 55)), 100),    "consume": np.random.choice([np.nan] + [round(x,2) for x in np.random.uniform(50, 5000, 90)], 100),    "pay_time": pd.date_range("2025-05-01", periods=100, freq="D"),    "remark": np.random.choice([np.nan, "正常订单", "加急", "开票"], 100)})df.to_excel("missing_data.xlsx", index=False)print("含缺失值测试数据生成完成")

③ 核心代码

import pandas as pddf = pd.read_excel("missing_data.xlsx")# 1. 全表缺失值统计(数量 + 占比)missing_count = df.isnull().sum()missing_rate = (df.isnull().mean() * 100).round(2)missing_info = pd.DataFrame({"缺失数量": missing_count, "缺失占比(%)": missing_rate})print("==== 缺失值分布统计 ====")print(missing_info)# 2. 数值字段:按年龄分组,用同组均值填充消费金额df["consume"] = df.groupby("age")["consume"].transform(lambda x: x.fillna(x.mean()))# 3. 文本字段:空值统一填充为"无备注"df["remark"] = df["remark"].fillna("无备注")# 4. 年龄字段:使用全局均值填充df["age"] = df["age"].fillna(df["age"].mean().round(0))# 5. 新增标记列:标记原始数据是否为缺失值df["age_is_missing"] = df["age"].isnull().astype(int)print("\n==== 处理后前10行数据 ====")print(df.head(10))

结果展示

总结

缺失值处理不能一刀切,需先分析缺失比例与业务含义:数值指标优先分组/全局均值填充,文本字段统一语义填充;无缺失字段不执行任何填充操作,避免冗余代码。新增缺失标记可保留原始数据特征,防止信息丢失。

最新文章

随机文章