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

Другие вопросы по тегам