Как выбрать все столбцы, кроме одного, в pandas?
У меня есть DataFrame, который выглядит следующим образом:
a b c d
0 0.418762 0.042369 0.869203 0.972314
1 0.991058 0.510228 0.594784 0.534366
2 0.407472 0.259811 0.396664 0.894202
3 0.726168 0.139531 0.324932 0.906575
Как я могу получить все столбцы, кроме столбца b
?
5 ответ(ов)
Когда столбцы не являются MultiIndex, df.columns
просто массив названий столбцов, поэтому можно сделать следующее:
df.loc[:, df.columns != 'b']
Это вернет DataFrame, который исключает столбец с именем 'b'. Например, если у вас есть DataFrame, который выглядит так:
a b c d
0 0.561196 0.123456 0.013768 0.772827
1 0.882641 0.234567 0.615396 0.075381
2 0.368824 0.345678 0.651378 0.397203
3 0.788730 0.456789 0.568099 0.869127
Результатом выполнения кода будет DataFrame, который выглядит так:
a c d
0 0.561196 0.013768 0.772827
1 0.882641 0.615396 0.075381
2 0.368824 0.651378 0.397203
3 0.788730 0.568099 0.869127
Таким образом, столбец 'b' будет исключен из результатов.
Чтобы удалить столбец 'b' из DataFrame df
, вы можете использовать метод difference()
для получения списка всех столбцов, кроме 'b', и затем использовать этот список для индексации вашего DataFrame. Вот пример кода:
df[df.columns.difference(['b'])]
В результате выполнения этого кода вы получите новый DataFrame, который не содержит столбца 'b'. Пример вывода будет следующим:
a c d
0 0.427809 0.459807 0.333869
1 0.678031 0.668346 0.645951
2 0.996573 0.673730 0.314911
3 0.786942 0.719665 0.330833
Этот подход полезен, когда вы хотите сохранить исходный DataFrame без изменения его структуры.
Вы можете использовать df.columns.isin()
для фильтрации столбцов:
df.loc[:, ~df.columns.isin(['b'])]
Если вам нужно удалить несколько столбцов, это делается так же просто:
df.loc[:, ~df.columns.isin(['col1', 'col2'])]
Этот подход позволяет исключить указанные столбцы из DataFrame.
Вот ещё один способ:
df[[i for i in list(df.columns) if i != '<ваш_столбец>']]
Вы просто передаёте все колонки, которые хотите отобразить, за исключением той, которую вы не хотите.
Для того чтобы исключить столбцы из DataFrame, можно использовать однострочную лямбду в Python с библиотекой pandas. Вот как можно это сделать:
Исходный DataFrame выглядит так:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(4, 4), columns=list('abcd'))
print(df)
На выходе у нас получится:
a b c d
0 0.774951 0.079351 0.118437 0.735799
1 0.615547 0.203062 0.437672 0.912781
2 0.804140 0.708514 0.156943 0.104416
3 0.226051 0.641862 0.739839 0.434230
Теперь, чтобы получить DataFrame без столбца 'b', можно использовать следующее выражение:
df = df[map(lambda x: x not in ['b'], list(df.columns))]
После выполнения этого кода, ваш DataFrame будет выглядеть так:
a c d
0 0.774951 0.118437 0.735799
1 0.615547 0.437672 0.912781
2 0.804140 0.156943 0.104416
3 0.226051 0.739839 0.434230
Здесь мы использовали map
для фильтрации колонок, которые мы хотим сохранить (в данном случае все, кроме 'b'). Это позволяет элегантно избавиться от ненужных столбцов в нашему DataFrame. Обратите внимание, что в современных версиях Python лучше использовать filter
или более чистый подход с использованием .loc
или .drop
, чтобы улучшить читаемость кода.
Выбор нескольких колонок в DataFrame Pandas
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Получить список из колонки или строки DataFrame в pandas?
Выбор строки из pandas Series/DataFrame по целочисленному индексу