繁体   English   中英

sklearn 估算行满足条件

[英]sklearn impute rows satisfying condition

我正在尝试使用 sklearn SimpleImputer 从包含泰坦尼克号数据的 pandas DataFrame 中的特定列中估算缺失的年龄。 但是,我想使用其他 Master 年龄的平均值分别估算姓名中包含“Master”一词的乘客的缺失值。

我尝试找到该数据,并分别处理:

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 循环并手动替换所有内容之外?

您需要先适应并使用它来转换数据。 当您拟合输入时,您使用该列以及缺失值。 使用拟合 model 来使用我在下面使用的变换来估算缺失值。

你能试试这个吗?

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回原始 dataframe。您不需要循环,您可以pd.merge它回来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM