Pandas使用mode填充缺失值原理及Weka对应实现方法咨询
pandas DataFrame 用mode填充缺失值的工作原理
mode就是众数,指一组数据中出现频率最高的值,是分类数据集缺失值填充的常用方案,不会引入原数据集不存在的分类取值。
你提到的代码df.fillna(df.mode().iloc[0])的执行逻辑可以拆解为3步:
- 首先执行
df.mode():对DataFrame的每一列单独计算众数,如果某一列存在多个出现次数相同的最高频值,会返回多行结果,每行对应一个众数 - 之后执行
.iloc[0]:取每一列的第一个众数,确保每一列最终只有一个固定的填充值,避免多众数场景下的维度不匹配问题 - 最后执行
df.fillna(...):用每列对应的众数填充该列的所有缺失值
Weka中使用mode填充缺失值的方法
Weka内置了专门的缺失值填充过滤器,默认就支持分类属性用众数填充:
GUI操作步骤
- 打开Weka Explorer界面,加载你的分类数据集
- 切换到
Preprocess标签页,点击Filter区域的Choose按钮 - 选择路径:
weka.filters.unsupervised.attribute.ReplaceMissingValues,应用该过滤器即可,该过滤器默认对分类(标称型)属性用众数填充缺失值,对数值型属性用均值填充
代码调用示例(Java)
import weka.core.Instances; import weka.filters.unsupervised.attribute.ReplaceMissingValues; // 加载数据集逻辑此处省略 ReplaceMissingValues replaceFilter = new ReplaceMissingValues(); replaceFilter.setInputFormat(originalData); Instances filledData = ReplaceMissingValues.useFilter(originalData, replaceFilter);
如果你只需要对分类属性用众数填充,数值属性用其他方案,可以先拆分两类属性分别处理后再合并即可。
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

