Python sklearn输入行满足条件

Python sklearn输入行满足条件,python,pandas,scikit-learn,imputation,Python,Pandas,Scikit Learn,Imputation,我试图使用sklearn SimpleImputer从包含泰坦尼克号数据的熊猫数据框中的特定列中估算缺失的年龄。然而,我想使用另一位船长的平均年龄分别估算姓名中包含“船长”一词的乘客的缺失值 我尝试定位该数据,并将其单独处理: imputer = SimpleImputer(strategy="mean") # Copy data imputed_X = X.copy() # Get data for "masters" masters = imputed_X[imputed_X['Name

我试图使用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循环和手动替换所有内容之外?

您需要首先进行调整并使用它来转换数据。拟合插补器时,使用列和缺少的值。使用该拟合模型,使用我在下面使用的变换来插补缺失的值

你能试试这个吗

imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp = imp.fit(imputed_X[['Age']])
imputed_X['Age'] = imp.transform(imputed_X[['Age']]).ravel()

如果您只想输入数据的一个子集,
(列名包含eg的master)
,则可以这样做,然后将其合并回原始数据帧。您不需要循环,您可以
pd.将它合并回来。

您可以发布一个示例数据吗?如果您只想替换姓名中包含
Masters
的人的年龄,请尝试类似
imputed\ux[imputed\ux['name'].str.contains(“Master”)]['age'].fillna(imputed\ux[imputed\ux['name'].str.contains(“Master”)]['age'].mean()
这是
simpleImputer的sklearn文档。这一个有适合的变换方法