python - 如何将我的推算数据与我的原始数据框合并?
问题描述
我正在解决泰坦尼克号 kaggle 问题,我想做的一件事是使用 sklearn 的 IterativeImputer 来填充我的缺失值。
在运行插补并生成“填充”值后,我遇到了障碍。我想知道如何最好地用填充的值更新原始数据框。
代码:
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.ensemble import RandomForestRegressor
import pandas as pd
import numpy as np
titanic = pd.DataFrame(
{
"PassengerId": [1, 2, 3, 4, 5],
"Survived": [0, 1, 1, 1, 0],
"PClass": ['3', '1', '3', '1', '3'],
"Name": ['Braund, Mr. Owen Harris', 'Cumings, Mrs. John Bradley (Florence Briggs Thayer)',
'Heikkinen, Miss. Laina', 'Futrelle, Mrs. Jacques Heath (Lily May Peel)', 'Allen, Mr. William Henry'],
"Sex": ['male', 'female', 'female', 'female', 'male'],
"Age": [22, 38, 26, np.nan, 35],
"SibSp": [1, 1, 0, 1, 0],
"Parch": [0, 0, 0, 0, 0],
"Fare": [7.25, 71.2833, 7.925, 53.1, 8.05]
}
)
# Slicing dataframe to feed to imputer
titanic_sliced = titanic.loc[:, ['Age', 'SibSp', 'Parch', 'Fare']]
titanic_sliced.head()
切片数据集的输出:
Age SibSp Parch Fare
0 22.0 1 0 7.2500
1 38.0 1 0 71.2833
2 26.0 0 0 7.9250
3 NaN 1 0 53.1000
4 35.0 0 0 8.0500
使用随机森林估计器运行 imputer
imp = IterativeImputer(RandomForestRegressor(), max_iter=10, random_state=0)
imputed_titanic = pd.DataFrame(imp.fit_transform(titanic_sliced), columns=titanic_sliced.columns)
imputed_titanic
imputed_titanic 的输出:
Age SibSp Parch Fare
0 22.00 1.0 0.0 7.2500
1 38.00 1.0 0.0 71.2833
2 26.00 0.0 0.0 7.9250
3 36.11 1.0 0.0 53.1000
4 35.00 0.0 0.0 8.0500
所以现在我的问题是,用推算值更新原始数据框的最佳方法是什么?
解决方案
你不能,因为给定的。您销毁了所需位置的数据。相反,您必须以某种方式维护该数据。我建议您将索引转移到一个简单的数据列,您可以稍后在其中恢复它。
推荐阅读
- java - 我们如何在 cloudsim 模拟器中指定任何虚拟机 (vm) 的执行时间
- php - 在 Laravel 5.6 中使用 {{URL:to()}}、{{URL::asset}} 或 {{HTML::script}}?
- unity3d - 构建游戏后标签不起作用
- c# - ExcelDNA 在运行时动态注册 UDF
- android - 当 textview 中只有一行用于可扩展字符串时,应用程序崩溃
- markdown - 如何创建没有前面空格的 RST 代码块?
- html - 我应该在 Angular 索引和 app.component.html 中写什么?
- mysql - MySQL中的“二进制字符串”是什么意思
- ruby-on-rails - 将 Redux 状态输入 Rails 数据库(使用 Rails Webpacker-React)
- mysql - MySQL 查询 JPQL 以进行多连接 SpringBoot + JPA