5

Как выбрать все столбцы, кроме одного, в pandas?

14

У меня есть 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 ответ(ов)

7

Когда столбцы не являются 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' будет исключен из результатов.

2

Чтобы удалить столбец '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 без изменения его структуры.

1

Вы можете использовать df.columns.isin() для фильтрации столбцов:

df.loc[:, ~df.columns.isin(['b'])]

Если вам нужно удалить несколько столбцов, это делается так же просто:

df.loc[:, ~df.columns.isin(['col1', 'col2'])]

Этот подход позволяет исключить указанные столбцы из DataFrame.

0

Вот ещё один способ:

df[[i for i in list(df.columns) if i != '<ваш_столбец>']]

Вы просто передаёте все колонки, которые хотите отобразить, за исключением той, которую вы не хотите.

0

Для того чтобы исключить столбцы из 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, чтобы улучшить читаемость кода.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь