You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame缺失值处理咨询:策略选择与最佳实践

Pandas缺失值处理策略与最佳实践

先明确:删还是填?

  • 先统计缺失值比例:用df.isnull().sum() / len(df)算出每列缺失占比,如果某列缺失超过70%-80%,直接删掉该列,这类特征对分析贡献极低,还会干扰结果。
  • 行缺失判断:如果某行缺失列数超过一半,或者目标变量/核心特征缺失,直接用df.dropna(subset=['target_col'])删掉该行;如果行缺失占比低,且缺失的是次要特征,优先考虑填充而非删除,避免丢失有效样本。

分类型处理缺失值

数值型列

  • 统计量填充:
    • 正态分布特征用均值:df['num_col'].fillna(df['num_col'].mean(), inplace=True)
    • 偏态分布或含异常值用中位数:df['num_col'].fillna(df['num_col'].median(), inplace=True)
    • 离散型数值用众数:df['discrete_num'].fillna(df['discrete_num'].mode()[0], inplace=True)
  • 插值填充:时间序列或有顺序逻辑的数值,用线性插值更贴合数据规律:df['num_col'].interpolate(method='linear', inplace=True)

类别型列

  • 众数填充:最通用的方案,df['cat_col'].fillna(df['cat_col'].mode()[0], inplace=True)
  • 新增“缺失”类别:如果缺失本身带有业务含义(比如用户不愿填写信息),直接填充为'Missing':df['cat_col'].fillna('Missing', inplace=True),后续建模可将其作为独立类别分析
  • 分组填充:基于关联特征的分组众数填充,比如按地区填充用户职业缺失:df['cat_col'] = df.groupby('region')['cat_col'].transform(lambda x: x.fillna(x.mode()[0]))

最佳实践

  • 先备份原始数据:操作前执行df_raw = df.copy(),避免误操作后无法恢复原始数据
  • 拒绝全局统一处理:针对不同列的特征类型、缺失原因、业务含义制定专属策略,别一股脑全删或全用均值填充
  • 验证处理影响:处理后对比特征分布(比如用df['num_col'].hist()查看数值分布变化),确保没有扭曲原始数据的规律
  • 标记缺失状态:如果采用填充方案,建议新增列标记该位置是否曾缺失,比如df['num_col_missing'] = df['num_col'].isnull().astype(int),后续建模可将其作为辅助特征

其他值得考虑的技术

  • 模型预测填充:把缺失列作为目标变量,用随机森林、XGBoost等模型,以其他完整特征为输入预测缺失值,适合缺失比例中等(20%-50%)的场景
  • K近邻填充:借助sklearn.impute.KNNImputer,用相似样本的特征值填充缺失项,适合小数据集:
    from sklearn.impute import KNNImputer
    imputer = KNNImputer(n_neighbors=5)
    df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
    
  • 多重插补:用专业库生成多个填充后的数据集,分别分析后综合结果,适合需要严谨统计结论的场景

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:02:15