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

使用KNN Imputer填充NaN值后仍存在缺失值的问题排查

问题排查与解决

核心错误点

  1. DataFrame列名不匹配
    imputed_data是fit_transform返回的numpy数组,创建df_temp时没指定列名,导致df_temp用默认的0、1、2...作为列名,和df_int的原列名完全不对应。执行df_int["Wave Height"] = df_temp["Wave Height"]时,df_temp里根本没有叫Wave Height的列,赋值后自然变成NaN,这就是那6个缺失值的来源。

  2. 未处理Water Temperature列
    你只替换了Wave Height和Wave Period,Water Temperature的原始63个缺失值没被填充后的列覆盖,所以缺失值还在。

修正后的代码

from sklearn.impute import KNNImputer
import pandas as pd

imputer = KNNImputer(n_neighbors=30)
df_int = df.drop(columns=["Beach Name", "Transducer Depth", "Measurement Timestamp 24h"])
imputed_data = imputer.fit_transform(df_int)
# 创建填充后的DataFrame时必须指定列名,和df_int保持一致
df_temp = pd.DataFrame(imputed_data, columns=df_int.columns)

# 直接用填充后的df_temp覆盖原df_int,避免逐个列赋值出错
df_int = df_temp.copy()

# 检查缺失值情况
print(df_int.isna().sum())

补充说明

KNN填充本身是生效的(df_temp无缺失值),问题完全出在填充后的数据回传环节——列名不匹配导致赋值失败,加上没覆盖所有有缺失的列。直接用df_temp覆盖df_int是最稳妥的方式,不用手动逐个列替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:50:54