正则表达式选择包含字符串的列除外

时间:2017-09-14 20:40:19

标签: python regex pandas

我有一个pandas DataFrame,如下所示。我想选择所有以“_cd”或“_ind”结尾的列,但“final_ind”列除外。我怎样才能做到这一点?

df = pd.DataFrame({
  'var1': [20, 30.0, 40],
  'var2_ind': ["a4", "a3", "b1"],
  'var3_cd': [10, 5, 7],
  'final_ind': [1, 0, 1],
})

这是我尝试过的:

df.ix[:, df.columns.str.contains('_cd|_ind')] #Gets all columns except var1
df.ix[:, df.columns.str.contains('_cd|_ind[^final_ind]')] #Gets only var3_cd

2 个答案:

答案 0 :(得分:3)

您可以filter使用regex,如下所示:

df.filter(regex='^(?!final).*(_cd|_ind)$')

# var2_ind  var3_cd
#0      a4       10
#1      a3        5
#2      b1        7
  • ^(?!final)会声明列名不要以final开头,这要归功于否定的向前看 (?!...) ;
  • .*(_cd|_ind)$匹配以_cd_ind;
  • 结尾的列名称

答案 1 :(得分:2)

另一种不使用negative look ahead RegEx的解决方案:

In [24]: df[df.columns[df.columns.str.contains('(?:_cd|_ind)$')].drop('final_ind')]
Out[24]:
  var2_ind  var3_cd
0       a4       10
1       a3        5
2       b1        7