如何将一种热编码的结果加入数据帧?

时间:2019-08-05 14:59:45

标签: python pandas

我想在人口普查数据集中执行一次性编码:

https://archive.ics.uci.edu/ml/datasets/census+income

我要执行的列在“国家/地区”列中,因此我进行了以下操作:

language

但是我收到一个错误消息:

import pandas as pd
from sklearn import preprocessing

def abrirArchivo(fileR):
    head=["gt lt 50","age","workclass","fnlwgt","edu","edu-num","mar-sta","occ","rela","race","sex","cap-gain","cap-loss","country","hpw"]
    f=pd.read_csv(fileR,sep=',')
    f.columns=head

    ohe=oneHot(f)
    print (ohe)

def oneHot(f):
    f[["country"]]=pd.get_dummies(f[["country"]])
    return f

当我进行序数编码时,以下代码没有问题:

ValueError: Columns must be same length as key

我想要的是将转换后的ohe(虚拟变量)与原始熊猫的数据框结合起来,以将其用于分类模型。

有帮助吗?

2 个答案:

答案 0 :(得分:2)

看看pd.get_dummies返回什么。现在,尝试考虑是否有可能将其放入单个列!不可能吧?

让我举例说明。假设您有一个数据框

   col1  col2  
0     1  name1   
1     2  name2   

现在,pd.get_dummies(df['col2'])返回:

     name1  name2
0     0     1
1     1     0

这是一个具有列的数据帧,其中一列对应col2列中的每个不同值。

如果您尝试这样做

df['col2'] = pd.get_dummies(df['col2'])

基本上,您将尝试在单个列中容纳两列的数据框。不可能!这就是ValueError: Columns must be same length as key的意思


如果您想将这些结果恢复到df中,则可以使用mergeconcatjoin。许多不同的方式(关于SO的许多问题)。一个例子是:

df.join(pd.get_dummies(df['col2'])).drop('col2', 1)

答案 1 :(得分:2)

您可以将对列应用一种热编码的结果与数据帧的其余部分连接起来,因此可以尝试;

f = pd.concat([f, pd.get_dummies(f[["country"]])], axis=1)

这将导致原始数据帧带有其他虚拟列,以删除您应添加的国家/地区列

f.drop(labels=["country"], axis=1)