【发布时间】:2020-09-30 12:09:57
【问题描述】:
我正在尝试使用 sklearn SimpleImputer 从包含泰坦尼克号数据的 pandas DataFrame 中的特定列中估算缺失的年龄。但是,我想单独使用其他主人年龄的平均值来估算姓名中包含“主人”一词的乘客的缺失值。
我尝试找到该数据,并单独处理:
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
这不是用平均年龄来计算所有缺失的 Master 的年龄,而是删除所有非缺失的年龄,并用 NaN 替换它们。
有没有更好的方法来做到这一点?例如,一个有效的?除了设置我自己的 for 循环并手动替换所有内容之外?
【问题讨论】:
-
你能发布一个示例数据吗?如果您只想替换姓名中包含
Masters的人的年龄,请尝试类似imputed_X[imputed_X['Name'].str.contains("Master")]['Age'].fillna(imputed_X[imputed_X['Name'].str.contains("Master")]['Age'].mean())
标签: python pandas scikit-learn imputation