
本文介绍使用 pandas 的 str.get_dummies() 方法,将含逗号分隔字符串的列(如 "some1,some2,some3")高效、简洁地展开为多个布尔型(True/False)列,实现一键 One-Hot 编码。
本文介绍使用 pandas 的 `str.get_dummies()` 方法,将含逗号分隔字符串的列(如 `"some1,some2,some3"`)高效、简洁地展开为多个布尔型(true/false)列,实现一键 one-hot 编码。
在数据预处理中,常遇到某一列存储了多个类别标签(以逗号分隔),例如用户兴趣标签 "sports,music,tech" 或产品属性 "red,large,organic"。这类数据无法直接用于机器学习建模,需转换为多列布尔标识——即每个唯一标签对应一列,值为 True(存在)或 False(不存在)。Pandas 提供了专为此类场景设计的便捷方法:Series.str.get_dummies()。
该方法自动完成三步操作:
- 按指定分隔符(如
',')切分字符串; - 统计所有唯一标签并创建对应列名;
- 对每行填充 1/0(表示是否包含该标签)。
为获得布尔类型结果,只需链式调用 .astype(bool),将整数 1/0 转换为 True/False:
import pandas as pd
# 构造示例数据
df = pd.DataFrame({
'column1': ["some1,some2,some3", "some2,some3", "some1", "some1,some3"]
})
# 一行代码生成布尔哑变量
result = df['column1'].str.get_dummies(sep=',').astype(bool)
print(result)
输出:
some1 some2 some3 0 True True True 1 False True True 2 True False False 3 True False True
✅ 优势说明:
- 无需手动
split()+explode()+pivot(),避免冗长代码和内存开销; - 自动去重并按字典序排列列名(可预测性强);
- 天然支持缺失值(空字符串或
NaN会生成全False行); -
sep参数灵活,支持任意分隔符(如';'、'|')。
⚠️ 注意事项:
- 若原始字符串含首尾空格(如
"some1, some2"),建议先清洗:df['column1'].str.replace(r'\s+', '', regex=True); - 若需保留原始 DataFrame 并合并结果,可用
pd.concat([df, result], axis=1); - 如需排除某列或重命名,可在
.get_dummies()后接.rename(columns={...})或.drop(columns=['col_to_exclude'])。
此方法是处理标签型字符串列最简洁、健壮的 pandas 原生方案,适用于 ETL 流程与特征工程阶段。










