sklearn输入行满足条件

2024-06-16 09:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: the数据nameforagedataget船长
1条回答
网友
1楼 · 发布于 2024-06-16 09:36:54

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

你能试试这个吗

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

如果您只想输入数据的一个子集,(column name contains master for eg),那么您可以这样做,然后merge将其返回到原始数据帧。您不需要循环,您可以pd.merge将其返回

相关问题 更多 >