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