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