如何从职位技能列提取技能并实现独热编码以构建ML数据集?
从技能列提取技能并实现0-1编码的高效方法
问题场景
我想要从job_skills列中提取所有技能作为属性,并对其进行0-1编码,请问该如何操作?注:我尝试构建DataFrame,但手动填充效率太低,希望找到从列中提取技能列表的方法,以便将数据集应用于机器学习算法。
原始代码示例
import pandas as pd data = [['a', ['Python', 'UI',' Information Technology (IT)','Software Development','GTK','English',' Software Engineering']], ['b', ['Python', 'Relational Databases',' Celery',' VMWare','Django','Continous Integration',' Test Driven Development',' HTTP']], ['c', ['Flask', 'Python',' Celery',' Software Development',' Computer Science','Information Technology (IT)']], ['c', ['Flask', 'Python',' Celery',' Software Development',' Computer Science','Information Technology (IT)']] ] df1= pd.DataFrame(data, columns=['col1', 'col2']) # 原始编码方法 pd.get_dummies(df1['col2'].explode()).groupby(level=0).sum()
方法解析
你给出的代码已经是高效实现需求的方案,核心步骤如下:
explode():将每行的技能列表拆分成多行,每个技能单独占一行,同时保留原行的索引。pd.get_dummies():将拆分后的技能列转换为独热编码(0-1)格式,每个技能作为一列,存在则标记为1,否则为0。groupby(level=0).sum():按原索引分组求和,将同一行拆分后的编码结果合并,得到每行对应的技能0-1编码。
优化建议:清理技能名称的冗余空格
示例中部分技能名称带有前后空格(比如' Information Technology (IT)'),这会导致相同技能被识别为不同列。可以在拆分前先清理空格,优化后的代码如下:
import pandas as pd data = [['a', ['Python', 'UI',' Information Technology (IT)','Software Development','GTK','English',' Software Engineering']], ['b', ['Python', 'Relational Databases',' Celery',' VMWare','Django','Continous Integration',' Test Driven Development',' HTTP']], ['c', ['Flask', 'Python',' Celery',' Software Development',' Computer Science','Information Technology (IT)']], ['c', ['Flask', 'Python',' Celery',' Software Development',' Computer Science','Information Technology (IT)']] ] df1= pd.DataFrame(data, columns=['col1', 'col2']) # 先清理技能名称的前后空格 df1['col2'] = df1['col2'].apply(lambda skills: [s.strip() for s in skills]) # 再执行编码操作 encoded_df = pd.get_dummies(df1['col2'].explode()).groupby(level=0).sum() print(encoded_df)
最终效果
执行优化后的代码后,会生成一个新的DataFrame:每一列对应一个去重后的技能,每行的数值表示该行是否包含对应技能(1表示包含,0表示不包含),可以直接用于机器学习模型的特征输入。
内容的提问来源于stack exchange,提问作者sas
相关产品推荐
相关产品推荐

