Scikit:从 imputer 而不是 Numpy Array 返回 Dataframe 的问题

Posted

技术标签:

【中文标题】Scikit:从 imputer 而不是 Numpy Array 返回 Dataframe 的问题【英文标题】:Scikit: Problem returning Dataframe from imputer instead of Numpy Array 【发布时间】:2019-11-07 21:10:32 【问题描述】:

我正在尝试使用 scikit-learn IterativeImputer() 在数据框中估算一些缺失值。问题是 imputer 将 pandas 数据帧作为输入,但将返回 numpy 数组而不是原始数据帧。这是取自 post 的一个简单示例。

# Create an empty dataset
df = pd.DataFrame()

# Create two variables called x0 and x1. Make the first value of x1 a missing value
df['x0'] = [0.3051,0.4949,0.6974,0.3769,0.2231,0.341,0.4436,0.5897,0.6308,0.5]
df['x1'] = [np.nan,0.2654,0.2615,0.5846,0.4615,0.8308,0.4962,0.3269,0.5346,0.6731]

imputer = IterativeImputer(max_iter=10, random_state=42)
imputer.fit(df)
imputed_df = imputer.transform(df)
imputed_df

问题是当numpy数组返回时,列名和其他元数据都被删除了。我当然可以手动从原始数据帧中提取元数据,然后重新应用它,但这似乎有点 hacky。 PandasDataframe.fillna() 方面有自己的估算器,但算法不如 scikit 复杂。

那么有没有办法让 imputer 适合数据帧并从结果中返回数据帧。

【问题讨论】:

【参考方案1】:

是的,你可以,只需将值重新赋值

df[:]= imputer.transform(df)

【讨论】:

哦,有道理。我想知道scikit 文档中没有包含如此简单的东西,但这非常有帮助。非常感谢。

以上是关于Scikit:从 imputer 而不是 Numpy Array 返回 Dataframe 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Scikit-learn Imputer 降维

scikit-learn 中的 Multivariate imputer 与 Simple imputer 有何不同?

No module named 'sklearn.impute',更新scikit-learn

scikit学习除NaN以外的插补值

Imputer 具有不同类型的值

SciKit 学习 ColumnTransformer TypeError:无法克隆对象。您应该提供一个 scikit-learn 估计器的实例而不是一个类