如何根据python中的名称选择多个列?

时间:2014-03-24 02:28:20

标签: python pandas

我是python的新手很抱歉,如果这太明显了。

我的数据框如下所示:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 10))
df.columns = ['date1', 'date2', 'date3', 'name1', 'col1', 'col2', 'col3', 'name2', 'date4', 'date5']

    date1     date2     date3     name1      col1      col2      col3  \
0 -0.177090  0.417442 -0.930226  0.460750  1.062997  0.534942 -1.082967   
1 -0.942154  0.047837 -0.494979  2.437469 -0.446984  0.709556 -0.135978   
2 -1.544783  0.129307 -0.169556 -0.890697  2.650924  0.976610  0.290226   
3 -0.651220 -0.196342  0.712601  0.641927 -0.009921 -0.038450  0.498087   
4 -0.299145 -1.407747  1.914364  0.554330 -0.196702  2.037057 -0.287942   

    name2     date4     date5  
0 -0.318310  0.358619 -0.243150  
1  1.171024  0.277943 -1.584723  
2 -0.546707 -1.951831  0.678125  
3 -0.510261 -0.018574 -0.212684  
4  1.929841  0.995625 -1.125044  

我希望保留所有列,例如' date'在他们的名字。也就是说,我想保留列' date1',' date2',' date3',' date4',' date5&# 39;等。在一些统计包中,我可以使用*来表示所有可能的字符,并使用如下命令:

keep date* 

在python中有相同的方法吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用filter方法。相当于keep date*

In [62]: df.filter(like='date')
Out[62]: 
      date1     date2     date3     date4     date5
0  0.091744 -0.431606  1.280286  0.263137  0.444550
1  0.688155  0.583918  0.957041  0.446047  1.654274
2  0.109004  0.608818  0.091498  0.940406  0.476479
3 -0.874016  1.312567  0.326480  1.213292  0.504049
4 -0.203515 -0.979086  0.458790  1.012296 -2.446310

filter方法还有一个regex关键字,可以进行更复杂的过滤 例如,要删除所有日期,您可以提供一个表示与某个字符串不匹配的正则表达式:df.filter(regex="^(?!date).*$")

在即将推出的pandas(0.14)中,此功能也将在drop方法中提供,因此这将更容易。