我试图使用sklearn SimpleImputer从包含泰坦尼克号数据的熊猫数据框中的特定列中估算缺失的年龄。但是,我想分别用另一位船长的平均年龄来计算姓名中包含“船长”一词的乘客的缺失值
我尝试定位该数据,并将其单独处理:
imputer = SimpleImputer(strategy="mean")
# Copy data
imputed_X = X.copy()
# Get data for "masters"
masters = imputed_X[imputed_X['Name'].str.contains("Master")]
# Get imputed version of Age column
masters_age_imputed = pd.DataFrame(imputer.fit_transform(masters[["Age"]]))
masters_age_imputed.index = masters.index
# (So far so good... the missing values have been replaced with the average)
# But putting those values back into the DataFrame doesn't work:
imputed_X.loc[X['Name'].str.contains("Master"),"Age"] = masters_age_imputed
这将删除所有未缺失的年龄,并将其替换为NaN,而不是将所有缺失的硕士年龄都计算为平均年龄
有更好的方法吗?例如,一个有效的?除了设置我自己的for循环和手动替换所有内容之外
您需要首先进行拟合,并使用它来转换数据。拟合插补器时,使用列和缺少的值。使用该拟合模型,使用我在下面使用的变换来插补缺失的值
你能试试这个吗
如果您只想输入数据的一个子集,
(column name contains master for eg)
,那么您可以这样做,然后merge
将其返回到原始数据帧。您不需要循环,您可以pd.merge
将其返回相关问题 更多 >
编程相关推荐