python中类似SQL的行数据的一个热编码器

python中类似SQL的行数据的一个热编码器,python,pandas,numpy,one-hot-encoding,Python,Pandas,Numpy,One Hot Encoding,我有以下格式的数据。我对第一栏不感兴趣;然而,第二列和第三列是一个职位,也是这个职位可能具备的一项技能示例(劳工统计局的经济学家提供了这一数据) 我想找到一个热门的矢量化,其中工作是行,技能是列;如果相应的作业需要相应的技能(否则为0),则单元格(j,s)接收值1 下面是我实现这种效果的“艰难之路”。然而,是否有一种更容易产生相同结果的方法 将熊猫作为pd导入 将numpy作为np导入 skill\u data=pd.read\u csv(“Technology Skills.csv”) job

我有以下格式的数据。我对第一栏不感兴趣;然而,第二列和第三列是一个职位,也是这个职位可能具备的一项技能示例(劳工统计局的经济学家提供了这一数据)

我想找到一个热门的矢量化,其中工作是行,技能是列;如果相应的作业需要相应的技能(否则为0),则单元格(j,s)接收值1

下面是我实现这种效果的“艰难之路”。然而,是否有一种更容易产生相同结果的方法

将熊猫作为pd导入
将numpy作为np导入
skill\u data=pd.read\u csv(“Technology Skills.csv”)
jobs=[技能数据中的job for job['Title'].unique()]
技能=[技能数据中技能对应的技能['Example'].unique()]
job_skill_dict={name:[]表示jobs中的name}
对于idx,skill_data.iterrows()中的行:
工作技能指令[第[1]行].追加(第[2]行)
作业\技能\向量={name:[]表示作业中的名称}
对于作业,作业技能目录项()中的技能列表:
作业技能向量[作业]=[1如果技能技能列表中的技能,则为1,否则为技能技能列表中的0]
vectors=[job\u skill\u vectors[job]for job in jobs]
作业技能矩阵=np.数组(向量)
我所做的基本上是创建一个独特的职位列表,然后是一个独特技能列表,然后创建一个字典,其中职位作为关键字,空列表作为值。然后我遍历dataframe行,将技能添加到刚才提到的字典的列表(值)中。接下来,我制作另一本字典,以职务为关键字,以空列表为值;这一次,我应用了一个热编码,其中每个技能按照技能列表的顺序显示1或0。最后,我将所有这些字典值(一个热向量的列表)按作业列表的顺序转储到一个巨大的列表中。最后,我从这个列表创建一个numpy数组

最终结果如下所示(这是需要的!)

工作技能矩阵
>>>
数组([[1,1,1,…,0,0,0],
[0, 0, 0, ..., 0, 0, 0],
[1, 0, 1, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 1, 1, 0],
[0, 0, 0, ..., 0, 0, 1]])
我相信您可以看出,由于计算原因以及用户错误的空间(许多变量需要重命名才能在新数据上重复此过程),这并不是最优的

如果有一个简单的方法来实现这个效果,我真的很感兴趣

使用:

如果您想要一个
numpy

df_dummies.to_numpy()
#df_dummies.values
此外,我们还可以使用以下内容:

df.pivot_table(index='Title', columns='Example', aggfunc='any').astype(int)
但这将返回一个稍有不同的数组

使用:

如果您想要一个
numpy

df_dummies.to_numpy()
#df_dummies.values
此外,我们还可以使用以下内容:

df.pivot_table(index='Title', columns='Example', aggfunc='any').astype(int)

但这将返回一个稍有不同的数组

尝试使用sqlalchemy库尝试使用sqlalchemy库