Как работать с переменным количеством столбцов в фрейме данных - PullRequest
2 голосов
/ 29 мая 2020

В имеющемся у меня фрейме данных так много столбцов, из которых мне нужно всего несколько. Например,

Col_A      Col_B      Col_C      Col_D      Col_E      Col_F
...        ...        ...      ...      ...      ...      ...        

Мне нужны только столбцы Col_A, Col_C and Col_E, поэтому в настоящее время я делаю df = df[['Col_A', 'Col_C', 'Col_E']], но проблема здесь в том, что не всегда будут столбцы A, C and E, возможно, все они не будут присутствовать. Поэтому мне нужно, если Col_A находится в df.columns, добавить в df и так далее. Есть ли простой способ сделать это? а не столько if? Теперь, если столбец отсутствует, я получаю KeyError: "['Col_C'] not in index

Ответы [ 4 ]

2 голосов
/ 29 мая 2020

Используйте Index.intersection:

df[df.columns.intersection(['Col_A','Col_A','Col_E'], sort=False)]
2 голосов
/ 29 мая 2020

Вы можете использовать loc и isin

df.loc[:, df.columns.isin(['a','b','c'])]
1 голос
/ 29 мая 2020

Вы можете использовать понимание списка . Например:

test_columns = ['Col_A', 'Col_C', 'Col_E']
df = df[[c for c in test_columns if c in df.columns]]
0 голосов
/ 29 мая 2020

Исходя из того, что я интерпретировал, вы можете создать копию df, сохранить ее в другой переменной, а затем «отбросить» столбцы, которые вам не нужны,

df_copy = df.copy()
df = df.drop(['Col_A', 'Col_C', 'Col_E'], axis = 1)

# If you want to add other columns to the df
df['Col_B'] = df_copy['Col_B']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...