数据集空值处理问题:使用均值/中位数等方法填充空值不生效如何解决
空值填充不生效的核心原因
- 字段类型不匹配:
wepp_id字段大概率是object/字符串类型,均值、最大值、最小值等统计函数仅能对数值类型字段生效,对字符串字段调用这类函数会直接返回空值,用空值替换空值自然没有效果。你可以执行df['wepp_id'].dtype验证字段类型。 - 空值匹配兼容问题:
replace(np.NAN, ...)写法对不同格式的空值(例如pandas原生的pd.NA、Python自带的None)匹配度低,容易出现匹配不到未替换的情况。 - 填充逻辑不符合字段属性:
wepp_id通常是电厂的唯一标识类字段,本身不属于可计算的数值字段,用均值、中位数这类数值统计结果填充本身就不符合业务逻辑,就算类型正确也没有实际意义。
解决办法
分两种场景处理:
场景1:wepp_id 确实为数值类型,需要用统计值填充
首先统一字段类型和空值格式,改用pandas原生的fillna方法执行填充:
import pandas as pd import numpy as np # 强制转为数值类型,无法转换的内容统一设为空值 df['wepp_id'] = pd.to_numeric(df['wepp_id'], errors='coerce') # 用均值填充空值,可根据需求替换为median()/max()/min() df['wepp_id'] = df['wepp_id'].fillna(df['wepp_id'].mean())
填充后执行 df['wepp_id'].isnull().sum() 即可验证填充效果。
场景2:wepp_id 为标识/字符串类型,不能用数值统计值填充
选择符合字段属性的填充逻辑:
- 用固定占位符填充:
df['wepp_id'] = df['wepp_id'].fillna('unknown')
- 用众数填充(仅适合分类字段):
# 取第一个众数填充,避免多众数的情况报错 df['wepp_id'] = df['wepp_id'].fillna(df['wepp_id'].mode()[0])
内容的提问来源于stack exchange,提问作者bishwajit bhattacharya
相关产品推荐
相关产品推荐

