KeyError: «Ни один из [Int64Index dtype = 'int64', length = 9313)] не находится в [столбцах]" - PullRequest
0 голосов
/ 24 января 2020

имеют кадр данных 323 столбца и 10348 строк. я хочу разделить его, используя стратифицированную k-Fold, используя следующий код

df= pd.read_csv("path")
 x=df.loc[:, ~df.columns.isin(['flag'])]
 y= df['flag']
StratifiedKFold(n_splits=5, random_state=None, shuffle=False)
for train_index, test_index in skf.split(x, y):
       print("TRAIN:", train_index, "TEST:", test_index)
       x_train, x_test = x[train_index], x[test_index]
       y_train, y_test = y[train_index], y[test_index]

, но я получаю следующую ошибку

KeyError: "None of [Int64Index([    0,     1,     2,     3,     4,     5,     6,     7,     8,\n               10,\n            ...\n            10338, 10339, 10340, 10341, 10342, 10343, 10344, 10345, 10346,\n            10347],\n           dtype='int64', length=9313)] are in the [columns]"

любой скажет мне, почему я получаю эту ошибку и как исправить это

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Похоже, у вас проблема с разрезанием фрейма данных, а не что-то не так с самим StratifiedKFold Я создал df для этой цели и решил его, используя ilo c, чтобы нарезать массив индексов здесь:

from sklearn import model_selection

# The list of some column names in flag
flag = ["raw_sentence", "score"]
x=df.loc[:, ~df.columns.isin(flag)].copy()
y= df[flag].copy()
skf =model_selection.StratifiedKFold(n_splits=2, random_state=None, shuffle=False)
for train_index, test_index in skf.split(x, y):
    print("TRAIN:", train_index, "TEST:", test_index)
    x_train, x_test = x.iloc[list(train_index)], x.iloc[list(test_index)]

И train_indexes и test_indexes, являющиеся nd-массивами, вроде как испортили работу здесь я конвертирую их в списки.

Вы можете сослаться: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html

0 голосов
/ 07 февраля 2020

Попробуйте изменить pandas массив данных на numpy массив следующим образом:

pd.DataFrame({"A": [1, 2], "B": [3, 4]}).to_numpy()

array([[1, 3],
       [2, 4]])
...