如何用Pandas按分隔符拆分列并转换为独热编码格式
没问题!你要实现的是把多值列转换成独热编码格式,用Pandas就能轻松搞定,我给你两种实用的方法:
方法一:用Pandas内置的str.get_dummies(最简单直接)
这个方法专门处理这类分隔符分隔的文本列,一步生成独热编码:
首先先构造你的原始DataFrame:
import pandas as pd df = pd.DataFrame({ 'Item': ['ID-1', 'ID-2', 'ID-3', 'ID-4', 'ID-5'], 'Colors': ['Red, Blue, Green', 'Red, Blue', 'Blue, Green', 'Blue', 'Red'] })
然后执行以下代码:
# 按", "拆分Colors列并生成独热编码 color_onehot = df['Colors'].str.get_dummies(', ') # 把Item列和独热编码结果合并 final_df = pd.concat([df['Item'], color_onehot], axis=1) # 调整列顺序为你想要的Red、Blue、Green final_df = final_df.reindex(columns=['Item', 'Red', 'Blue', 'Green'])
运行后你就能得到完全符合需求的结果:
Item Red Blue Green 0 ID-1 1 1 1 1 ID-2 1 1 0 2 ID-3 0 1 1 3 ID-4 0 1 0 4 ID-5 1 0 0
方法二:用MultiLabelBinarizer(适合更复杂的多标签场景)
如果你的Colors列后续可能出现更多新颜色,这个方法会自动识别所有类别,扩展性更强:
import pandas as pd from sklearn.preprocessing import MultiLabelBinarizer # 构造原始DataFrame df = pd.DataFrame({ 'Item': ['ID-1', 'ID-2', 'ID-3', 'ID-4', 'ID-5'], 'Colors': ['Red, Blue, Green', 'Red, Blue', 'Blue, Green', 'Blue', 'Red'] }) # 把Colors列转换成列表格式(每个元素是颜色列表) color_lists = df['Colors'].str.split(', ') # 初始化多标签二值化器 mlb = MultiLabelBinarizer() # 生成独热编码数组 onehot_array = mlb.fit_transform(color_lists) # 转换成DataFrame并指定列名 color_df = pd.DataFrame(onehot_array, columns=mlb.classes_) # 合并并调整列顺序 final_df = pd.concat([df['Item'], color_df], axis=1).reindex(columns=['Item', 'Red', 'Blue', 'Green'])
这个方法的好处是,哪怕之后Colors里出现了比如Yellow,它也会自动新增Yellow列,不用手动修改代码。
内容的提问来源于stack exchange,提问作者christfan868
相关产品推荐
相关产品推荐

