#python #pandas #numpy #filter
#python #pandas #numpy #Фильтр
Вопрос:
У меня есть фрейм данных, например, с 24 столбцами, и мой вопрос в том, как я могу взять все столбцы, кроме, например, столбца номер 17?
data[:,:]
используя такой синтаксис.
Комментарии:
1. Вы можете просто использовать
drop()
функцию для удаления 17-го столбца, например:df.drop('17_column', 1)
2.
df.iloc[:, start_col:end_col]
3. Манакин, но, используя ваш код, я беру только начальный столбец, например, 1, и конечный столбец, например, 16, но я хочу, чтобы все столбцы, кроме номера 17
Ответ №1:
вы можете сделать это:
data.drop(columns=['a']) # for column name
data.drop(columns=data.columns[17]) # for column index
Он возвращает a dataframe
, который вы можете использовать.
Для получения дополнительной информации: pandas drop
Комментарии:
1. Спасибо, это намного лучше, чем предыдущее редактирование, которое не сработало, я не могу удалить свой ответ сейчас, но этот метод более удобочитаем.
2. Я обновил ответ. drop([17]) просто удалял строки.
Ответ №2:
Я думаю, что самым простым способом было бы:
data.loc[:, data.columns != 'col_name']
или
data.loc[:, ~data.columns.isin(['col_name'])]
Ответ №3:
Вы можете использовать np.r_
, df.iloc
как показано ниже, для индексации на основе позиций с нарезкой:
pos_of_col= 17
df.iloc[:,np.r_[range(pos_of_col-1),range(pos_of_col,len(df.columns))]]
Демонстрация, удаление столбца в позиции 4 (столбец 3, поскольку индексация python начинается с 0)
np.random.seed(0)
df = pd.DataFrame(np.random.randint(0,20,(5,10))).add_prefix("col_")
print(df,'n')
pos_of_col= 4
print(df.iloc[:,np.r_[range(pos_of_col-1),range(pos_of_col,len(df.columns))]])
col_0 col_1 col_2 col_3 col_4 col_5 col_6 col_7 col_8 col_9
0 12 15 0 3 3 7 9 19 18 4
1 6 12 1 6 7 14 17 5 13 8
2 9 19 16 19 5 15 15 0 18 3
3 17 19 19 19 14 7 0 1 9 0
4 10 3 11 18 2 0 0 4 5 6
col_0 col_1 col_2 col_4 col_5 col_6 col_7 col_8 col_9
0 12 15 0 3 7 9 19 18 4
1 6 12 1 7 14 17 5 13 8
2 9 19 16 5 15 15 0 18 3
3 17 19 19 14 7 0 1 9 0
4 10 3 11 2 0 0 4 5 6