ValueError: столбцы должны быть такой же длины, как ключ
У меня проблема с запуском кода ниже.
данные - мой фрейм данных 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)
2 ответа
Похоже, что это проблема размерности. Это будет похоже на следующее:
Скажи у меня есть list
вот так:
mylist = [0, 0, 0, 0]
Он имеет длину 4. Если бы я хотел сделать отображение 1:1 элементов нового списка в этот:
otherlist = ['a', 'b']
для i в диапазоне (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
Нет причин создавать свои собственные функции. У Pandas есть функция, которая делает то, что вы уже хотите:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html