使用pd.get_dummies()如何保留原NA值、不生成单独NA哑变量列
实现目标效果的操作方案
核心逻辑
- 调用
pd.get_dummies()时不要传入dummy_na=True参数,该参数的作用就是将缺失值识别为独立类别,生成专属的哑变量列,是需要规避的行为 - 定位原数据中存在缺失值的行索引,在生成的哑变量结果中,将这些行的所有哑变量取值统一替换为缺失值,即可匹配期望的转换效果
具体操作步骤
- 预处理数据:将示例中存储为字符串类型的缺失标识(即
"NA")替换为pandas可识别的真正空值,避免被误判为普通离散类别
# 把字符串形式的"NA"替换为pandas标准缺失值 df["someCol"] = df["someCol"].replace("NA", pd.NA)
- 正常生成哑变量,保持
dummy_na参数为默认值False
# 生成哑变量,此时缺失值行的位置默认在所有哑变量列填充0 dummies = pd.get_dummies(df["someCol"])
- 对缺失行的哑变量值做替换
# 找到原数据中缺失值对应的行索引 na_row_pos = df[df["someCol"].isna()].index # 将这些行的所有哑变量取值替换为NA dummies.loc[na_row_pos, :] = pd.NA
结果说明
执行完成后,生成的哑变量表完全符合预期:不会单独生成someCol_NA独立列,原缺失值所在行的所有哑变量位置都会保留NA值,和你给出的表3结构完全一致。
提示:如果对多列分类变量批量执行该操作,只要把上述逻辑封装成通用函数逐列调用即可,不需要逐列手动调整。
内容的提问来源于stack exchange,提问作者Zakariah Siyaji
相关产品推荐
相关产品推荐

