Python用*加另一列选择列

时间:2019-02-13 06:45:47

标签: python pandas

在Python中,我想指定带有通配符的列列表以及其他列。示例:假设一个数据帧df具有列x1x2yz且我想要['x1', 'x2', 'y']。我想使用类似这样的通配符来做到这一点:

mask = df.columns.str.contains('x*') df.loc[:, [mask, 'y']].head()

我遇到错误:TypeError:无法散列的类型:'numpy.ndarray'

1 个答案:

答案 0 :(得分:2)

您的解决方案应更改为通配符获取列,转换为列表并添加y

cols = df.columns[df.columns.str.contains('x.*?')].tolist() + ['y']
df.loc[:, cols].head()

或按位或添加带有链的蒙版:

mask = df.columns.str.contains('x.*?') | (df.columns == 'y')
df.loc[:, mask].head()

或将str.startswith与元组一起使用:

mask = df.columns.str.startswith(('x','y'))
df.loc[:, mask].head()

如果只有x带有数字或一个字母列,请使用DataFrame.filter

df.filter(regex='x|y').head()

示例

df = pd.DataFrame({
        'x':list('abcdef'),
        'x2':[4,5,4,5,5,4],
        'y':[7,8,9,4,2,3],
        'z':[1,3,5,7,1,0],

})

print (df)
   x  x2  y  z
0  a   4  7  1
1  b   5  8  3
2  c   4  9  5
3  d   5  4  7
4  e   5  2  1
5  f   4  3  0

mask = df.columns.str.startswith(('x','y'))
print(df.loc[:, mask].head())
   x  x2  y
0  a   4  7
1  b   5  8
2  c   4  9
3  d   5  4
4  e   5  2