Ошибка оси при отбрасывании определенных столбцов панд - PullRequest
0 голосов
/ 21 января 2019

Я определил конкретные столбцы, которые я хочу выбрать в качестве моих предикторов для моей модели на основе некоторого анализа.Я захватил эти номера столбцов и сохранил их в списке.У меня есть примерно 80 столбцов, и я хочу просмотреть и удалить столбцы, которых нет в этом конкретном списке.X_train - это столбец, в котором я хочу это сделать.Вот мой код:

cols_selected = [24, 4, 7, 50, 2, 60, 46, 53, 48, 61]
cols_drop = []

for x in range(len(X_train.columns)):
    if x in cols_selected:
        pass
    else:
        X_train.drop([x])

При выполнении этого я сталкиваюсь со следующей ошибкой при выделении кода: X_train.drop ([x]):

KeyError:'[3] не найден на оси'

Я уверен, что мне не хватает чего-то очень простого.Я попытался включить операторы inplace = True или axis = 1 вместе с этим, и у всех них было одно и то же сообщение об ошибке (хотя значение внутри [] изменилось с этими кодами ошибок).

Любая помощь будет отличной!

Редактировать: вот дополнение, чтобы заставить это работать:

cols_selected = [24, 4, 7, 50, 2, 60, 46, 53, 48, 61]
cols_drop = []

for x in range(len(X_train.columns)):
    if x in cols_selected:
        pass
    else:
        cols_drop.append(x)

X_train = X_train.drop(X_train.columns[[cols_drop]], axis=1)    

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Кроме того, в дополнение к @pygo, указывающему, что df.drop использует ключевое слово arg для обозначения оси, попробуйте следующее:

X_train = X_train[[col for col in X_train.columns if col in cols_selected]] 

Вот пример:

>>> import numpy as np
>>> import pandas as pd
>>> cols_selected = ['a', 'c', 'e']
>>> X_train = pd.DataFrame(np.random.randint(low=0, high=10, size=(20, 5)), columns=['a', 'b', 'c', 'd', 'e'])
>>> X_train
    a  b  c  d  e
0   4  0  3  5  9
1   8  8  6  7  2
2   1  0  2  0  2
3   3  8  0  5  9
4   5  9  7  8  0
5   1  9  3  5  9 ...
>>> X_train = X_train[[col for col in X_train.columns if col in cols_selected]]
>>> X_train
    a  c  e
0   4  3  9
1   8  6  2
2   1  2  2
3   3  0  9
4   5  7  0
5   1  3  9 ...
0 голосов
/ 21 января 2019

Согласно документации капля :

Удалить строки или столбцы, указав имена меток и соответствующие оси, или указав непосредственно индекс или имена столбцов

Вы не можете удалить столбцы, просто используя индекс столбца. Вам нужно название столбцов. Кроме того, параметр axis должен быть установлен на 1 или columns Замените X_train.drop([x]) на X_train=X_train.drop(X_train.columns[x], axis='columns'), чтобы ваш пример работал.

0 голосов
/ 21 января 2019

Я просто предполагаю, что в ответе на вопрос:

Пример DataFrame:

>>> df
   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

Отбрасывание определенных столбцов B & C:

>>> df.drop(['B', 'C'], axis=1)
# df.drop(['B', 'C'], axis=1, inplace=True) <-- to make the change the df itself , use inplace=True
   A   D
0  0   3
1  4   7
2  8  11

Если вы пытаетесь отбросить их по номерам столбцов (Dropping by index), попробуйте, как показано ниже:

>>> df.drop(df.columns[[1, 2]], axis=1)
   A   D
0  0   3
1  4   7
2  8  11

OR

>>> df.drop(columns=['B', 'C'])
   A   D
0  0   3
1  4   7
2  8  11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...