Ответ 1
Вы используете разные соглашения для индексации Pandas DataFrame
индексации и индексирования NumPy ndarray
. Массивы train_index
и test_index
являются наборами индексов строк. Но data
- это объект Pandas DataFrame
, и когда вы используете один индекс в этом объекте, как в data[train_index]
, Pandas ожидает, что train_index
будет содержать метки столбцов, а не индексы строк. Вы можете преобразовать dataframe в массив NumPy, используя .values
:
data_array = data.values
for train_index, test_index in sss:
xtrain, xtest = data_array[train_index], data_array[test_index]
ytrain, ytest = target[train_index], target[test_index]
или используйте Pandas .iloc
:
for train_index, test_index in sss:
xtrain, xtest = data.iloc[train_index], data.iloc[test_index]
ytrain, ytest = target[train_index], target[test_index]
Я предпочитаю второй подход, поскольку он дает xtrain
и xtest
типа DataFrame
, а не ndarray
, и поэтому сохраняет метки столбцов.