sklearn 的 KNN Imputer 可以处理数据框中的特定行吗?

问题描述 投票:0回答:1

我有一个带有一些 NaN 值的 pandas 数据框,我正在尝试使用 KNN 输入器来填充它们。我希望输入器根据特定参数选择“邻居”,在这种情况下,它应该只根据具有相同“patent_id”的值进行输入。缺失值是一些医学分析结果。

我尝试通过创建一个唯一的“patent_id”列表来解决这个问题,使用:

patient_list=data['patient_id'].unique()

然后我使用“patent_id”掩码迭代列表,然后将所有子数据帧合并在一起:

from sklearn.impute import KNNImputer
knn = KNNImputer(missing_values=np.nan)

data_imputed = pd.DataFrame()

for patient_id in patient_list:
    X = knn.fit_transform(data[data['patient_id']==patient_id])
    X_ = pd.DataFrame(X, columns = data.columns)
    data_imputed.merge(X_, on=['patient_id','visit_month','visit_id'], how='left', copy=False)

但它给了我一个 ValueError:

ValueError: Shape of passed values is (4, 1187), indices imply (4, 1198)

我的原始数据框有 1198 列,那么 11 列是如何丢失的呢?谢谢您的帮助!

dataframe machine-learning scikit-learn knn imputation
1个回答
0
投票

从 sklearn.impute 导入 KNNImputer knn = KNNImputer(missing_values=np.nan)

数据估算 = []

对于患者列表中的患者 ID: X = knn.fit_transform(数据[数据['病人id']==病人id]) X_ = pd.DataFrame(X, 列 = data.columns) data_impulated.append(X_, on=['patent_id','visit_month','visit_id'], how='left', copy=False)

数据估算 = pd.concat(数据估算)

© www.soinside.com 2019 - 2024. All rights reserved.