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

KNNImputer处理数值型DataFrame时意外丢弃列的原因排查

问题原因及解决办法

核心原因:输入数据中存在全为NaN的列

KNNImputer的插补逻辑依赖列内的有效值计算样本间距离,若某一列所有值都是NaN,既无法参与距离计算,也找不到任何邻居的有效值完成插补,这类列会被直接排除在输出结果之外。你的输入列数216,输出27,说明有216-27=189列是完全缺失的。

验证方法

执行以下代码确认全NaN列的数量及具体列名:

# 统计全NaN列的数量
print(input_df.isna().all().sum())
# 查看具体哪些列是全NaN
print(input_df.columns[input_df.isna().all()])

解决思路

  1. 保留全NaN列:如果这些列有业务价值,KNNImputer无法处理这类完全缺失的列,需要换用其他插补方式(比如按业务规则填充固定值、全局均值/中位数等),之后再结合KNNImputer处理其他列。
  2. 删除全NaN列:如果这些列无实际意义,可以提前删除后再用KNNImputer插补:
# 删除所有全NaN列
clean_df = input_df.drop(columns=input_df.columns[input_df.isna().all()])
# 再执行插补
output_df = imputer.fit_transform(clean_df)

关于n_neighbors=1的说明

你说得没错,这个参数只会影响插补值的选取逻辑(用最近邻的单一值替换缺失),和列被丢弃的问题完全无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:04:59