Удалить определенные столбцы в кадре данных - игнорировать элементы не в индексе - PullRequest
1 голос
/ 27 марта 2020

У меня есть несколько сотен фреймов данных, которые в целом похожи, но содержат некоторые различия. Я хотел бы отфильтровать каждый фрейм данных, чтобы он содержал только те столбцы, для которых имя столбца существует в предварительно определенном списке. См. Ниже:

import pandas as pd

col_list = ['red','green','blue','yellow','orange']

my_data = {'red':[1,2,3,5,6], 'purple':[3,5,1,6,2], 'orange':[2,6,5,7,3]}
my_df = pd.DataFrame(my_data)    

my_subdf = my_df[col_list]

Проблема, с которой я сталкиваюсь, заключается в том, что я получаю KeyError ( "['yellow', 'green', 'blue'] не в index ), если не каждый столбец представлен в исходном фрейме данных, который я не могу гарантировать.

Как мне обойти это, чтобы я проигнорировал индекс и достиг чего-то в соответствии со следующим (псевдокод):

if column in my_df
    column.append(my_subdf)

else:
    ignore/continue

1 Ответ

2 голосов
/ 27 марта 2020

Если вы хотите иметь все столбцы из col_list, вы можете использовать reindex:

my_subdf = my_df.reindex(columns=col_list)

:

   red  green  blue  yellow  orange
0    1    NaN   NaN     NaN       2
1    2    NaN   NaN     NaN       6
2    3    NaN   NaN     NaN       5
3    5    NaN   NaN     NaN       7
4    6    NaN   NaN     NaN       3

Если вы хотите только пересечение, Вы можете сделать

my_subdf = my_df.reindex(columns=[col for col in my_df.columns if col in set(col_list)])

, чтобы получить:

   red  orange
0    1       2
1    2       6
2    3       5
3    5       7
4    6       3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...