处理缺失值和异常值是Python数据清洗核心,需依业务逻辑和分布选择策略;缺失值含NaN、空字符串、占位符等,须多方法联合识别;填充应按数值型、分类型、时间型分别处理。
处理缺失值和异常值是Python数据清洗中最核心的两步,直接影响后续分析和建模效果。关键不是“删光”或“填满”,而是根据业务逻辑和数据分布做有依据的选择。
缺失值不只有np.nan,还可能表现为空字符串、占位符(如"NULL"、"missing"、-999)、或统一编码的异常码(如“999999”)。用df.isna()只能捕获NaN和None;需结合df.astype(str).applymap(lambda x: x.strip() == '')查空格空串,再用df.eq()匹配自定义缺失标记。
df['col'].value_counts(dropna=False)查看缺失是否集中于某类数值型、分类型、时间型缺失不能一概而论。均值/中位数填充适合近似正态分布且缺失率低(
3σ法则和IQR法容易误判——前者假设正态分布,后者对长尾数据敏感。实际中建议组合使用:箱线图+散点图初筛,局部离群因子(LOF)识别密度异常点,再结合业务规则校验。例如电商订单金额异常,既要看统计离群,也要核对是否为批发大单或测试数据。
直接删除可能丢失重要模式(如黑产行为集中在某时段)。更稳妥的做法是:缩尾(Winsorize)处理极端值,或分箱后将异常归入“高风险”区间;若确认是录入错误,可尝试反向推算(如用同地区同品类均值修正)。