ValueError: установка элемента массива с последовательностью? - PullRequest
0 голосов
/ 14 марта 2019

Почему я получаю это сообщение об ошибке?

Вот переменные, которые включены в мой код. Все столбцы, которые они включают, являются фиктивными переменными:

country_cols = wine_dummies.loc[:, 'country_Chile':'country_US']
variety_cols = wine_dummies.loc[:, 'variety_Cabernet 
Sauvignon':'variety_Zinfandel']
pricecat_cols = wine_dummies.loc[:, 'price_category_low':]

Вот код, который выдает ошибку (он выдает ошибку в «X = wine [feature_cols_1]»:

feature_cols_1 = ['price', country_cols, variety_cols, 'year']
feature_cols_2 = [pricecat_cols, country_cols, variety_cols, 'year']

X = wine[feature_cols_1] <---ERROR
y = wine['points']

Вот заголовок моего фрейма данных:

country designation points  price   province    variety      year   ... variety_Riesling    variety_Rosé    variety_Sangiovese  variety_Sauvignon Blanc variety_Syrah   variety_Tempranillo variety_White Blend variety_Zinfandel   price_category_low  price_category_med
Portugal    Avidagos    87  15.0    Douro   Portuguese Red  2011.0  ... 0  0    0   0   0   0   0   0   1 0    

^ каждая фиктивная переменная (0 с и 1 с) после "..." соответствует каждому столбцу после "..."

1 Ответ

0 голосов
/ 14 марта 2019

Это на самом деле довольно громоздко, поэтому будет полезно, если у вас есть много столбцов между 'country_Chile':'country_US'. В приведенном ниже примере я намеренно отбрасываю столбец a в middle_columns, беря индексы столбца.

Используется pandas.Index.get_loc для поиска индексов начального и конечного столбцов, которые затем можно использовать в качестве среза в полном списке столбцов данных. Затем он распаковывает этот список, используя *, в окончательный список столбцов.

import pandas as pd

df = pd.DataFrame({'a': [1, 2, 3], 'b': [2, 3, 4], 'c': [3, 4, 5], 
                   'd': [4, 5, 6], 'wine': ['happy', 'drunk', 'sad'],
                   'year': [2002, 2003, 2019]})

middle_columns = df.columns[df.columns.get_loc('b'):df.columns.get_loc('d')+1]
all_cols = ['wine', *middle_columns, 'year']
X = df[all_cols]

Причина, по которой ваш текущий подход не работает, заключается в том, что feature_cols_1 = ['price', country_cols, variety_cols, 'year'] возвращает список строк и фреймов данных, которые вы затем пытаетесь использовать в качестве столбцов для второго фрейма данных.

...