Как выбрать колонки в DataFrame по списку?

Нужно по списку выбрать определенные колонки в DataFrame.

Cписок c колонками:

lst = ['JOHN', 'GARRY']

DataFrame:

df = pd.DataFrame({'JOHN': [1111, 2222, 3333], 'EMMA': [1234, 6666, None], 'GARRY': [5555, 5678, 7777]})

Я знаю как выбрать указав конкретные колонки, но как сделать из списка, не могу сообразить:

df = df[['JOHN', 'GARRY']]

Ответы (1 шт):

Автор решения: MaxU

Вариант 1: наиболее идиоматический:

In [144]: df.loc[:, lst]
Out[144]:
   JOHN  GARRY
0  1111   5555
1  2222   5678
2  3333   7777

Вариант 2:

In [145]: df[lst]
Out[145]:
   JOHN  GARRY
0  1111   5555
1  2222   5678
2  3333   7777

Вариант 3: можно использовать если в списке столбцов есть такие, которые не встречаются в DataFrame - это позволит обойти ошибку KeyError:

In [146]: df.filter(lst + ['N/A'])
Out[146]:
   JOHN  GARRY
0  1111   5555
1  2222   5678
2  3333   7777

Вариант 4: можно использовать если в списке столбцов есть такие, которые не встречаются в DataFrame - это позволит обойти ошибку KeyError:

In [148]: df.loc[:, df.columns.intersection(['AAA', 'JOHN', 'GARRY'])]
Out[148]:
   JOHN  GARRY
0  1111   5555
1  2222   5678
2  3333   7777

NOTE: варианты 3 и 4 позволяют использовать списки, содержащие несуществующие столбцы (см. вариант 4 для примера).

→ Ссылка