如何将Pandas DataFrame多值字符串列映射为ML可用编码格式?
解决方法
先优化你的唯一CPU提取逻辑
你原来的函数可以简化成更高效的版本,直接处理整个列的所有数据,避免嵌套循环:
import pandas as pd def get_unique_cpus(df, col): # 分割字符串、去除首尾空格、展开所有CPU项后去重 all_cpus = df[col].str.split(",").explode().str.strip() return all_cpus.unique().tolist() supported_cpu_list = get_unique_cpus(df, 'supported_cpu')
方法1:手动生成独热编码列
适合快速生成每个CPU对应的0/1标记列,直观易懂:
# 遍历每个唯一CPU,为DataFrame添加对应的编码列 for cpu in supported_cpu_list: df[f"cpu_{cpu}"] = df['supported_cpu'].apply( lambda x: 1 if cpu in [item.strip() for item in x.split(",")] else 0 )
每一行中,如果包含该CPU,对应列值为1,否则为0,直接可以作为ML模型的输入特征。
方法2:使用sklearn的MultiLabelBinarizer(推荐多标签场景)
如果你的任务是多标签分类(一行数据可能对应多个CPU标签),用这个工具更专业高效:
from sklearn.preprocessing import MultiLabelBinarizer # 第一步:把原列转换为去除空格后的CPU列表 df['cpu_list'] = df['supported_cpu'].apply(lambda x: [item.strip() for item in x.split(",")]) # 第二步:初始化二值化器并生成编码 mlb = MultiLabelBinarizer(classes=supported_cpu_list) cpu_encoded_matrix = mlb.fit_transform(df['cpu_list']) # 第三步:把编码结果转为DataFrame并合并到原数据 cpu_encoded_df = pd.DataFrame( cpu_encoded_matrix, columns=mlb.classes_, index=df.index ) df = pd.concat([df, cpu_encoded_df], axis=1) # 可选:删除中间生成的cpu_list列 df = df.drop('cpu_list', axis=1)
生成的编码列同样是0/1格式,且专门适配多标签场景,后续可以直接传入ML模型。
内容的提问来源于stack exchange,提问作者D_D
相关产品推荐
相关产品推荐

