在Python中,我想指定带有通配符的列列表以及其他列。示例:假设一个数据帧df
具有列x1
,x2
,y
,z
且我想要['x1', 'x2', 'y']
。我想使用类似这样的通配符来做到这一点:
mask = df.columns.str.contains('x*')
df.loc[:, [mask, 'y']].head()
我遇到错误:TypeError:无法散列的类型:'numpy.ndarray'
答案 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