使用OneHotEncoder时将NaN值映射到哑变量的简便方法
解决OneHotEncoder哑变量同步原缺失值的问题
快速修复批量赋值报错
你之前的批量赋值代码报错,是因为把整个df_experience_level DataFrame传给了loc的列参数,而这里需要一维的列名列表。用这条单语句就能实现批量同步缺失值:
df.loc[df['experience_level'].isna(), df_experience_level.columns] = np.nan
更高效的预处理方式
如果不想后续再合并到原DataFrame修改,也可以在生成哑变量DataFrame时直接处理:
oh = OneHotEncoder(min_frequency=0.0001, sparse_output=False) data = oh.fit_transform(df[['experience_level']]) cols = oh.get_feature_names_out() df_experience_level = pd.DataFrame(data, columns=cols) # 直接定位原变量缺失的行,将所有哑变量设为NaN df_experience_level.loc[df['experience_level'].isna(), :] = np.nan
替代方案:用pandas.get_dummies简化流程
如果不需要sklearn OneHotEncoder的特殊配置,用pandas的get_dummies可以更简洁地完成需求:
# 生成包含缺失值类别的哑变量 df_experience_level = pd.get_dummies(df['experience_level'], prefix='experience_level', dummy_na=True) # 将原缺失值行的非nan类别哑变量设为NaN df_experience_level.loc[df['experience_level'].isna(), df_experience_level.columns.drop('experience_level_nan')] = np.nan
内容的提问来源于stack exchange,提问作者Englishman Bob
相关产品推荐
相关产品推荐

