如何在Weka中替换数据集中的'?'缺失值标记
Weka中标称型列
?符号的替换操作方案 Weka内置的ReplaceMissingValues过滤器仅识别平台默认的缺失值标记,你数据集中的?目前是作为独立标称值存在的,因此无法被直接识别处理,可通过以下三种方案解决:
方案1:先转?为官方缺失值,再执行标准替换
- 打开数据集后进入
Preprocess面板,点击Choose选中filters.unsupervised.attribute.NumericCleaner过滤器 - 点击过滤器名称打开参数配置页:
attributeIndices填写要处理的列序号,支持范围写法(如2处理第二列,1-5处理前5列,last处理最后一列)valueToReplace填写?replaceWith选择missing- 保存参数后点击
Apply执行,此时原有的?会被识别为Weka官方认可的缺失值
- 再次选择
ReplaceMissingValues过滤器执行,即可按照标称列众数、数值列均值的规则自动替换缺失值
注意:该方案适合需要遵循Weka标准缺失值处理逻辑的场景
方案2:直接替换?为指定标称值
如果不需要走标准缺失值替换流程,可直接把?合并为指定的标称值(如Unknown):
- 在
Preprocess面板选中filters.unsupervised.attribute.MergeManyValues过滤器 - 打开参数配置页:
attributeIndex指定目标列序号label填写替换后的目标值,如Unknownvalues填写?- 保存参数后点击
Apply执行,所有?会直接替换为你设置的目标值
方案3:导入数据集时直接识别?为缺失值
如果你的数据源是CSV格式,可在导入阶段就把?标记为缺失值,省去后续处理步骤:
- 点击
Open file选中CSV文件后,在弹出的配置窗口中找到naValues参数 - 在原有默认值的基础上添加
,?,确保?被纳入缺失值识别规则 - 导入完成后
?会直接被识别为缺失值,直接使用ReplaceMissingValues处理即可
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

