根据包含pandas

时间:2017-04-26 20:00:06

标签: python pandas

我使用以下内容创建了一个数据框:

df = pd.DataFrame(np.random.rand(10, 3), columns=['alp1', 'alp2', 'bet1'])

我想获得一个数据框,其中包含df中名称中包含alp的所有列。这只是我问题的一个简单版本,因此我的真实数据框将有更多列。

4 个答案:

答案 0 :(得分:12)

替代方法:

es6

答案 1 :(得分:3)

选项1
完整numpy + pd.DataFrame

m = np.core.defchararray.find(df.columns.values.astype(str), 'alp') >= 0
pd.DataFrame(df.values[:, m], df.index, df.columns[m])

       alp1      alp2
0  0.819189  0.356867
1  0.900406  0.968947
2  0.201382  0.658768
3  0.700727  0.946509
4  0.176423  0.290426
5  0.132773  0.378251
6  0.749374  0.983251
7  0.768689  0.415869
8  0.292140  0.457596
9  0.214937  0.976780

选项2
numpy + loc

m = np.core.defchararray.find(df.columns.values.astype(str), 'alp') >= 0
df.loc[:, m]

       alp1      alp2
0  0.819189  0.356867
1  0.900406  0.968947
2  0.201382  0.658768
3  0.700727  0.946509
4  0.176423  0.290426
5  0.132773  0.378251
6  0.749374  0.983251
7  0.768689  0.415869
8  0.292140  0.457596
9  0.214937  0.976780

<强> 定时
numpy更快

enter image description here

答案 2 :(得分:2)

你有几个选择,这里有几个:

1 - filterlike

df.filter(like='alp')

2 - filterregex

df.filter(regex='alp')

答案 3 :(得分:0)

如果@Pedro答案在这里不起作用,这是熊猫0.25的官方处理方法

示例数据框:

>>> df = pd.DataFrame(np.array(([1, 2, 3], [4, 5, 6])),
...                   index=['mouse', 'rabbit'],
...                   columns=['one', 'two', 'three'])
         one two three
mouse     1   2   3
rabbit    4   5   6

通过名称选择列

df.filter(items=['one', 'three'])
         one  three
mouse     1      3
rabbit    4      6

通过正则表达式选择列

df.filter(regex='e$', axis=1) #ending with *e*, for checking containing just use it without *$* in the end
         one  three
mouse     1      3
rabbit    4      6

选择包含“ bbi”的行

df.filter(like='bbi', axis=0)
         one  two  three
rabbit    4    5      6