熊猫过滤器排除一些列

时间:2019-05-06 17:01:38

标签: python pandas dataframe

我知道我们只能使用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 个答案:

答案 0 :(得分:2)

使用包含
df.loc[:,~df.columns.str.contains('num')]

使用差异
df[df.columns.difference(['num_1','num_2'])]

@ALollz的积分
如果您坚持使用filter

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

但这不仅丑陋,难以阅读/理解,而且还容易受到Regular expression to match a line that doesn't contain a word中讨论的正则表达式搜索陷阱的影响。

我建议坚持使用contains

答案 1 :(得分:2)

您可以使用列表理解功能获取不包含num的列的列表

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

然后对数据进行子集

df[cols_without_num]