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。 Pandas
在 Dataframe.fillna()
方面有自己的估算器,但算法不如 scikit
复杂。
那么有没有办法让 imputer 适合数据帧并从结果中返回数据帧。
【问题讨论】:
【参考方案1】:是的,你可以,只需将值重新赋值
df[:]= imputer.transform(df)
【讨论】:
哦,有道理。我想知道scikit
文档中没有包含如此简单的东西,但这非常有帮助。非常感谢。以上是关于Scikit:从 imputer 而不是 Numpy Array 返回 Dataframe 的问题的主要内容,如果未能解决你的问题,请参考以下文章
scikit-learn 中的 Multivariate imputer 与 Simple imputer 有何不同?
No module named 'sklearn.impute',更新scikit-learn
SciKit 学习 ColumnTransformer TypeError:无法克隆对象。您应该提供一个 scikit-learn 估计器的实例而不是一个类