Фильтр панд исключает некоторые столбцы - PullRequest
1 голос
/ 06 мая 2019

Я знаю, что мы можем выбрать только несколько столбцов, используя фильтр данных pandas, но можем ли мы также исключить только некоторые столбцы?

Вот MWE:

import numpy as np
import pandas as pd


df = pd.DataFrame({'id': [1,2,3], 'num_1': [10,20,30], 'num_2': [20,30,40]})

df.filter(regex='num')

Можем ли мы выбрать все столбцы, не имеющие 'num' в столбцах:

Что-то вроде:

df.filter(regex='^(num)')

Требуемый выход

   id
0   1
1   2
2   3

Примечание

# these already works, i am only looking regex way
df[['id']] # gives the required output

Справка:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.filter.html

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Вы можете получить список столбцов, не имеющих num, используя понимание списка

cols_without_num = [x for x in list(df) if 'num' not in x]

Затем подмножество данных

df[cols_without_num]
2 голосов
/ 06 мая 2019

Использование содержит
df.loc[:,~df.columns.str.contains('num')]

Использование разности
df[df.columns.difference(['num_1','num_2'])]

Кредиты @ ALollz
Если вы настаиваете на использовании filter:

df.filter(regex='^((?!num).)*$')

Но это не только некрасиво и трудно читать / понимать, но и уязвимо для некоторых ловушек поиска регулярных выражений, как обсуждалось в Регулярное выражение для соответствия строке, которая не содержит слова .

Я бы предложил придерживаться contains.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...