我想在人口普查数据集中执行一次性编码:
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(虚拟变量)与原始熊猫的数据框结合起来,以将其用于分类模型。
有帮助吗?
答案 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中,则可以使用merge
,concat
或join
。许多不同的方式(关于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)