过滤数据框中以特定字符串开头的列

时间:2017-05-16 06:37:07

标签: pandas

我有以下df,我想对列名称应用过滤器,只是保留以某个字符串开头的过滤器:

这是我目前的df:

ruta2:
             Current SAN Prev.1m SAN Prev.2m SAN Prev.3m SAN Current TRE  \

A                   5           6           7           6           3
B                   6           5           7           6           6
C                  12          11          11          11           8

基本上我想要的是过滤数据框并保留以Current开头的列。

然后所需的输出将是:

ruta2:
             Current SAN  Current TRE  

A                   5            3
B                   6            6
C                  12            8

为了做到这一点,我尝试了这个过滤器,但输出了一个值错误:

ruta2=ruta2[~(ruta2.columns.str[:4].str.startswith('Prev'))]

2 个答案:

答案 0 :(得分:1)

似乎你只需要:

ruta2=ruta2.loc[:, ~(ruta2.columns.str[:4].str.startswith('Prev'))]
#same as
#ruta2=ruta2.loc[:, ~ruta2.columns.str.startswith('Prev')]
print (ruta2)
   Current SAN  Current TRE
A            5            3
B            6            6
C           12            8

或者:

cols = ruta2.columns[ ~(ruta2.columns.str[:4].str.startswith('Prev'))]
ruta2=ruta2[cols]
print (ruta2)
   Current SAN  Current TRE
A            5            3
B            6            6
C           12            8

但是,如果只需要Current列,则使用filter^表示在正则表达式中启动字符串):

ruta2=ruta2.filter(regex='^Current')
print (ruta2)
   Current SAN  Current TRE
A            5            3
B            6            6
C           12            8

答案 1 :(得分:0)

#filter the columns names starting with 'Current'
ruta2[[e for e in ruta2.columns if e.startswith('Current')]]
Out[383]: 
   Current SAN  Current TRE
A           5           3
B           6           6
C          12           8

或者您可以使用掩码数组来过滤列:

ruta2.loc[:,ruta2.columns.str.startswith('Current')]
Out[385]: 
   Current SAN  Current TRE
A           5           3
B           6           6
C          12           8