如何在Python中对Dataframe列的逗号分隔文本进行标签编码?
实现多值类别列的二值化编码方案
你需要的是多标签二值化(注意:这不是普通的标签编码,普通标签编码会把类别映射为单一整数,不适合多值共存的场景),以下提供两种简便的实现方法:
方法一:使用Pandas原生函数
先构建与你数据一致的示例DataFrame:
import pandas as pd df = pd.DataFrame({ '形状': ['Circle', 'Square', 'Triangle', 'Rectangle'], '重量': [5, 7, 8, 10], 'Colour': ['Blue, Red', 'Yellow, Red', 'Blue, Yellow, Red', 'Green'] })
通过字符串拆分+独热编码生成目标格式:
# 将Colour列的多值转为|分隔格式,再生成二值化列 colour_dummies = df['Colour'].str.split(', ').str.join('|').str.get_dummies() # 合并原数据与编码列,删除原Colour列 final_df = pd.concat([df.drop('Colour', axis=1), colour_dummies], axis=1)
方法二:使用Scikit-learn的MultiLabelBinarizer
适合更复杂的多标签场景,支持自定义标签集合:
import pandas as pd from sklearn.preprocessing import MultiLabelBinarizer df = pd.DataFrame({ '形状': ['Circle', 'Square', 'Triangle', 'Rectangle'], '重量': [5, 7, 8, 10], 'Colour': ['Blue, Red', 'Yellow, Red', 'Blue, Yellow, Red', 'Green'] }) # 初始化多标签二值化器 mlb = MultiLabelBinarizer() # 将Colour列拆分为嵌套列表格式 colour_list = df['Colour'].str.split(', ').tolist() # 执行编码并转为DataFrame colour_encoded = pd.DataFrame(mlb.fit_transform(colour_list), columns=mlb.classes_) # 合并数据得到结果 final_df = pd.concat([df.drop('Colour', axis=1), colour_encoded], axis=1)
运行上述代码后,即可得到你需要的DataFrame格式。
内容的提问来源于stack exchange,提问作者ScottC
相关产品推荐
相关产品推荐

