Scikit:从输入器而不是 Numpy 数组返回数据帧的问题

kri*_*nab 5 python numpy dataframe pandas scikit-learn

我正在尝试使用scikit-learn IterativeImputer(). 问题是输入器会将pandas数据帧作为输入,但会返回一个numpy数组而不是原始数据帧。这是取自这篇文章的一个简单示例。

# 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
Run Code Online (Sandbox Code Playgroud)

问题是当numpy数组返回时,列名和其他元数据被删除。我当然可以从原始数据框中手动提取该元数据,然后重新应用它,但这似乎有点麻烦。Pandas有自己的输入法,Dataframe.fillna()但算法并不像scikit那些算法那么复杂。

那么有没有办法将输入器拟合到数据帧并从结果返回数据帧。

WeN*_*Ben 12

是的,你可以,只需重新分配值

df[:]= imputer.transform(df)
Run Code Online (Sandbox Code Playgroud)

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