如何通过循环对指定变量应用有序映射实现分类变量数值化?
问题描述
我的数据集中包含若干质量变量,希望将它们转换为数值形式。已创建映射字典和待转换变量列表:
qual_mappings = {'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5, 'Missing': 0, 'NA': 0} qual_vars = ['ExterQual', 'ExterCond', 'BsmtQual', 'BsmtCond', 'HeatingQC', 'KitchenQual', 'FireplaceQu', 'GarageQual', 'GarageCond' ]
尝试编写循环遍历这些变量但失败,需要可行的Python实现方案,完成变量按映射替换为对应数值的需求。
解决方案
假设你的数据集是用pandas存储的DataFrame(命名为df),以下是几种可行的实现方式:
方法1:基础for循环遍历替换
直接遍历目标变量列表,用map()方法完成映射:
# 遍历每个待转换变量 for col in qual_vars: # 按字典映射替换,若遇未匹配值会变为NaN,可按需调整 df[col] = df[col].map(qual_mappings)
如果数据集中存在空值(如NaN),先统一替换为字典中的标识再映射:
for col in qual_vars: # 填充空值为'Missing'后执行映射 df[col] = df[col].fillna('Missing').map(qual_mappings)
方法2:批量替换(简洁高效)
利用pandas的replace()方法一次性处理所有目标变量,无需显式循环:
# 直接批量替换 df[qual_vars] = df[qual_vars].replace(qual_mappings) # 含空值处理的版本 df[qual_vars] = df[qual_vars].fillna('Missing').replace(qual_mappings)
方法3:applymap批量处理
通过applymap()对多列执行相同映射逻辑:
# 保留未匹配的原始值(若有) df[qual_vars] = df[qual_vars].applymap(lambda x: qual_mappings.get(x, x)) # 处理空值的版本 df[qual_vars] = df[qual_vars].fillna('Missing').applymap(lambda x: qual_mappings[x])
内容的提问来源于stack exchange,提问作者cheezeduckies
相关产品推荐
相关产品推荐

