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

基于Pandas的数据清洗:如何处理含特殊值的年龄列以适配EDA?

针对含特殊取值年龄列的EDA适配清洗方案

以下是几种实用的清洗逻辑,可根据你的数据集规模、业务背景和EDA目标选择:

  • 区间映射为数值代表值
    把模糊的区间取值转化为具体数值,方便后续的统计分析:

    • 对于<9,可以取区间中点4(覆盖0-8岁范围),或者业务上更合理的上限8;
    • 对于10+,如果没有明确上限,取区间最小值10;若能推断出合理范围(比如10-18岁),取中点14;
    • 对于>45,取区间起始值46,或结合数据集其他年龄分布取常见的区间中点(比如46-60岁的中点53);
      示例代码(Python pandas):
    def clean_age(age_val):
        if age_val == '<9':
            return 4
        elif age_val == '10+':
            return 10
        elif age_val == '>45':
            return 46
        else:
            return int(age_val) if str(age_val).isdigit() else pd.NA
    
    df['cleaned_age'] = df['age'].apply(clean_age)
    
  • 转化为分类年龄组
    保留原始区间的业务含义,将年龄划分为分组变量,适合做分组对比分析:

    • 自定义区间标签,比如:儿童(<9)、青少年(10-18)、成年(19-45)、中老年(>45);
    • 这种方式避免了硬编码数值带来的偏差,能更直观展示不同群体的特征差异;
      示例代码:
    # 先把特殊值转为可用于分箱的数值
    df['temp_age'] = df['age'].replace({'<9': 8, '10+': 10, '>45': 46})
    df['temp_age'] = pd.to_numeric(df['temp_age'], errors='coerce')
    
    df['age_group'] = pd.cut(df['temp_age'],
                            bins=[-float('inf'), 9, 19, 45, float('inf')],
                            labels=['儿童', '青少年', '成年', '中老年'])
    
  • 标记为缺失值单独处理
    如果不确定特殊取值的合理映射,或者这类样本占比极低,可以将其标记为缺失值(NaN):

    • 在EDA阶段单独统计缺失样本的占比,分析其是否存在分布偏差(比如是否集中在某些特征维度);
    • 这种方式避免了错误赋值导致的分析偏差,适合数据量充足的场景;
      示例代码:
    df['cleaned_age'] = pd.to_numeric(df['age'], errors='coerce')
    # 把特殊符号的行标记为缺失
    df.loc[df['age'].isin(['<9', '10+', '>45']), 'cleaned_age'] = pd.NA
    
  • 结合业务规则精细化映射
    如果有业务背景支撑(比如数据来自儿童教育调研,10+特指10-12岁),可以基于业务知识确定更精准的映射:

    • 比如医疗场景中,>45可能对应45-65岁的高危人群,可参考行业标准确定区间代表值;
    • 这种方式能最大程度保留数据的业务价值,让EDA结果更贴合实际业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:47