
本文介绍使用 pandas 的 str.get_dummies() 方法,将含逗号分隔字符串的列快速、高效地转换为多个布尔型(True/False)标志列,适用于标签多值分类、特征工程等场景。
本文介绍使用 pandas 的 `str.get_dummies()` 方法,将含逗号分隔字符串的列快速、高效地转换为多个布尔型(true/false)标志列,适用于标签多值分类、特征工程等场景。
在数据处理中,常遇到某一列以字符串形式存储多个类别标签(如 "cat,dog,bird"),而建模或分析时需将其展开为独立的布尔特征列(即“独热编码”的变体,但输出为 bool 而非 int)。Pandas 提供了简洁高效的内置方案:Series.str.get_dummies()。
该方法专为字符串分割与编码设计,支持自定义分隔符(如逗号、分号、空格),并直接返回数值型 DataFrame(默认为 uint8)。只需链式调用 .astype(bool) 即可获得所需的 True/False 布尔矩阵。
以下为完整示例:
import pandas as pd
# 构造示例数据
data = {'column1': ["some1,some2,some3", "some2,some3", "some1", "some1,some3"]}
df = pd.DataFrame(data)
# 一步生成布尔型独热编码列
boolean_df = df['column1'].str.get_dummies(sep=',').astype(bool)
print(boolean_df)输出结果:
some1 some2 some3 0 True True True 1 False True True 2 True False False 3 True False True
✅ 关键优势:
- 无需手动
split+explode+crosstab或MultiLabelBinarizer,代码极简; - 自动识别所有唯一标签并生成对应列(列名即标签名),无遗漏、无顺序依赖;
- 天然支持缺失值(若原字符串为空或为
NaN,对应行全为False); - 性能优于循环或
apply,底层向量化实现。
⚠️ 注意事项:
- 输入字符串中若含空格(如
"some1, some2"),空格会成为标签一部分(生成列名为" some2"),建议预处理清洗:df['column1'].str.replace(r'\s+', '', regex=True); - 若需保留原始索引或与原 DataFrame 合并,可使用
pd.concat([df, boolean_df], axis=1); - 列名默认按字典序排列,如需固定顺序,可在后续重排列:
boolean_df = boolean_df[['some1', 'some2', 'some3']]。
综上,str.get_dummies(sep=',').astype(bool) 是处理多标签字符串列最直接、鲁棒且符合 pandas 惯例的解决方案,推荐作为标准操作纳入数据预处理流程。

















