如何用循环高效将DataFrame中多个分类特征转为哑变量?
高效生成分类特征哑变量的方法
方法1:批量处理分类特征(推荐)
直接针对所有需要转换的分类特征列调用一次pd.get_dummies,无需循环,代码最简洁高效,还能避免重复劳动。
步骤:
- 先把所有要处理的分类特征列名整理成列表
- 用
pd.get_dummies批量生成哑变量,指定drop_first=True(逻辑回归必须加,避免多重共线性) - 可选:把生成的哑变量合并回原数据集,或者单独保留
示例代码:
import pandas as pd # 把所有需要转哑变量的特征列名放这里 categorical_features = ['Sex', 'Embarked', 'Identity', 'Religion', ...] # 补充你的其他特征 # 批量生成所有哑变量 all_dummies = pd.get_dummies(train[categorical_features], drop_first=True) # 要是想把哑变量合并到原数据集里 train_with_dummies = pd.concat([train, all_dummies], axis=1) # 单独取某一个特征的哑变量也很方便 sex_dummies = all_dummies.filter(regex='Sex_') embark_dummies = all_dummies.filter(regex='Embarked_')
方法2:循环处理并存储到字典
如果确实需要把每个特征的哑变量单独存成可调用的“变量”,用字典存储比逐个定义变量更整洁,不会让你的代码里堆满类似sex/embark这种零散变量。
示例代码:
import pandas as pd categorical_features = ['Sex', 'Embarked', 'Identity', 'Religion', ...] # 用字典存每个特征的哑变量 dummy_store = {} for feat in categorical_features: dummy_store[feat] = pd.get_dummies(train[feat], drop_first=True) # 调用的时候直接按键取 sex = dummy_store['Sex'] embark = dummy_store['Embarked']
补充提醒
逻辑回归里drop_first=True一定要加,它会删掉每个分类特征的第一个类别,避免“哑变量陷阱”导致的多重共线性问题,这会影响模型的稳定性。
内容的提问来源于stack exchange,提问作者PineNuts0
相关产品推荐
相关产品推荐

