You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python缺失值标准填充方法咨询:小数据集无法删行的处理方案

嘿,这两个问题都是数据预处理里的经典痛点,我结合实际项目经验给你梳理清楚:

1. Python中填充缺失值的标准方法

下面是几种工业界常用的填充手段,适配不同场景:

  • 统计量填充(数值/类别特征通用)
    数值型优先用中位数(避免异常值干扰),有明显众数的类别型直接用众数填充,是最稳妥的基础方案:
    import pandas as pd
    # 中位数填充数值列
    df['age'].fillna(df['age'].median(), inplace=True)
    # 众数填充类别列(mode返回Series,取第一个值)
    df['gender'].fillna(df['gender'].mode()[0], inplace=True)
    
  • 常数填充
    如果缺失值有明确业务含义(比如用户未填写),直接用固定值标记,比如'Unknown'0(注意0只适合确实表示“无”的场景):
    df['occupation'].fillna('Unknown', inplace=True)
    df['income'].fillna(0, inplace=True)
    
  • 前后向填充(时序数据专属)
    针对时间序列或有顺序的数据集,用相邻的有效值填充,能保留数据的连续性:
    df['daily_sales'].fillna(method='ffill', inplace=True)  # 用前一天数据填充
    df['daily_sales'].fillna(method='bfill', inplace=True)  # 用后一天数据填充
    
  • 插值填充
    适合有连续趋势的数值数据,比如线性插值、时间插值,比简单统计量填充更贴合数据规律:
    df['temperature'].interpolate(method='linear', inplace=True)
    
  • 模型预测填充
    用其他完整特征训练简单模型(比如KNN、线性回归)预测缺失值,适合缺失比例适中且数据有相关性的场景,但要注意避免过拟合:
    from sklearn.impute import KNNImputer
    imputer = KNNImputer(n_neighbors=3)  # 小数据集建议k取2-3
    df_filled = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
    
2. 小数据集多列缺失且无法删除行的标准处理流程

小数据集容错率极低,不能随便套用通用方法,得按以下步骤谨慎处理:

  1. 先做缺失值诊断
    先搞清楚缺失的本质:各列缺失比例、缺失是否和其他特征相关(比如某类用户集体不填某个字段):

    # 查看各列缺失比例
    print(df.isnull().sum() / len(df))
    # 可视化缺失分布(看是否有规律)
    import seaborn as sns
    sns.heatmap(df.isnull(), cbar=False)
    

    如果是非随机缺失,别直接填充,先新增一个[col]_is_missing的二值特征(0=无缺失,1=有缺失),把缺失本身作为信息保留。

  2. 分特征类型选填充策略

    • 数值型特征:优先用中位数(小数据集均值波动大,容易被异常值带偏);如果是时序数据,用前后向填充。
    • 类别型特征:优先新增“Missing”类别(比强行填充众数更合理,小数据集的众数可能不具代表性),如果缺失比例极低(<3%)再考虑众数填充。
  3. 拒绝过度复杂的填充方法
    小数据集用复杂模型(比如随机森林)预测缺失值很容易过拟合,会把噪声当成规律。如果一定要用模型填充,就选最简单的KNN,并且用交叉验证确认效果。

  4. 验证填充效果
    填充后用简单模型(比如逻辑回归、决策树)做交叉验证,对比填充前后的模型性能。如果性能下降,说明填充策略破坏了数据规律,得调整。

内容的提问来源于stack exchange,提问作者TechGeek

火山引擎 最新活动