ValueError: столбцы должны иметь ту же длину, что и ключ - PullRequest
0 голосов
/ 20 сентября 2018

У меня проблема с запуском приведенного ниже кода.

data - мой фрейм данных.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 ]

0 голосов
/ 20 сентября 2018

Нет причин создавать свои собственные функции.У Панд есть функция, которая делает то, что вы уже хотите:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html

0 голосов
/ 20 сентября 2018

Похоже, что это проблема размерности.Это будет выглядеть следующим образом:

Скажем, у меня есть 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

...