我在运行下面的代码时遇到问题。
数据是我的数据框。 X是火车数据列的列表。 L是带有数字值的分类特征的列表。
我想对我的分类特征进行热编码。所以我做如下。但是会抛出“ ValueError:列的长度必须与键的长度相同”(对于最后一行)。经过长时间的研究,我仍然不明白为什么。
def turn_dummy(df, prop):
dummies = pd.get_dummies(df[prop], prefix=prop, sparse=True)
df.drop(prop, axis=1, inplace=True)
return pd.concat([df, dummies], axis=1)
L = ['A', 'B', 'C']
for col in L:
data_final[X] = turn_dummy(data_final[X], col)
答案 0 :(得分:2)
看来这是一个尺寸问题。就像下面这样:
说我有一个list
,就像这样:
mylist = [0, 0, 0, 0]
它的长度为4。如果我想将新列表中的元素进行1:1映射到那个列表中:
otherlist = ['a', 'b']
for i in range(len(mylist)):
mylist[i] = otherlist[i]
很显然,这会抛出IndexError
,因为它试图获取otherlist
根本没有的元素
这里几乎发生了同样的事情。您试图将string
(len = 1)插入到长度n> 1的列中。试试:
data_final[X] = turn_dummy(data_final[X], L)
假设len(L) = number_of_rows
答案 1 :(得分:1)
没有理由创建自己的功能。熊猫具有执行所需功能的功能:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html