Как удалить несколько столбцов, заканчивающихся одинаковым текстом в Pandas?

python pandas dataframe

1461 просмотра

5 ответа

33 Репутация автора

Я пытаюсь удалить группу столбцов из набора данных. Все переменные для удаления заканчиваются текстом «префикс».

Мне удалось «собрать» их в группу, используя следующее: введите описание изображения здесь

а затем попробовал ряд способов отбросить эту группу, что привело к множеству ошибок. Может кто-нибудь, пожалуйста, предложить способ удаления этих столбцов?

Автор: Tanya Источник Размещён: 17.07.2016 09:35

Ответы (5)


4 плюса

428770 Репутация автора

Я думаю, что вам нужно:

not_prefix_cols= [col for col in df.columns if not 'prefix' in col]
df2[not_prefix_cols]

Но лучше использовать:

prefix_cols= [col for col in df.columns if not col.endswith('prefix')]
print (df[prefix_cols])

Образец:

import pandas as pd

df = pd.DataFrame({'prefixone' : pd.Series([1, 2, 3, 4]),
                   'twoprefix' : pd.Series([20, 30, 40, 50]),
                   'two1prefix' : pd.Series([20, 30, 40, 50])})

print (df)
   prefixone  two1prefix  twoprefix
0          1          20         20
1          2          30         30
2          3          40         40
3          4          50         50

prefix_cols= [col for col in df.columns if not col.endswith('prefix')]
print (df[prefix_cols])
   prefixone
0          1
1          2
2          3
3          4
Автор: jezrael Размещён: 17.07.2016 09:37

4 плюса

118272 Репутация автора

Решение
df2 = df.drop([col for col in df.columns if 'prefix' in col],axis=1)
Автор: bernie Размещён: 17.07.2016 09:38

5 плюса

42530 Репутация автора

df2 = df.ix[:, ~df.columns.str.endswith('prefix')]
Автор: ayhan Размещён: 17.07.2016 09:40

5 плюса

183192 Репутация автора

используя filterиregex

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

демонстрация

df = pd.DataFrame(np.random.rand(2, 6),
                  columns=['oneprefix', 'one',
                           'twoprefix', 'two',
                           'threeprefix', 'three'])

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

введите описание изображения здесь

где:

df

введите описание изображения здесь


тайминг

Все примерно одинаковы введите описание изображения здесь

Автор: piRSquared Размещён: 17.07.2016 10:11

5 плюса

137836 Репутация автора

для полноты картины:

In [306]: df
Out[306]:
   prefixcol1  col2prefix  col3prefix  colN
0           1           1           1     1
1           2           2           2     2
2           3           3           3     3

In [307]: df.loc[:, ~df.columns.str.contains('prefix$')]
Out[307]:
   prefixcol1  colN
0           1     1
1           2     2
2           3     3

или другой вариант:

In [388]: df.select(lambda x: re.search(r'prefix$', str(x)) is None, axis=1)
Out[388]:
   prefixcol1  colN
0           1     1
1           2     2
2           3     3
Автор: MaxU Размещён: 17.07.2016 10:38
Вопросы из категории :
32x32