我从一个带有神秘命名列的接口(interface)获取一个数据帧,其中我知道一些在所有列上互斥的子字符串。
一个简化的示例如下所示:
df = pandas.DataFrame({'d10432first34sf':[1,2,3],'d10432second34sf':[4,5,6]})
df
d10432first34sf d10432second34sf
0 1 4
1 2 5
2 3 6
由于我知道列子字符串,因此我可以通过以下方式访问各个列:
df.filter(like='first')
d10432first34sf
0 1
1 2
2 3
df.filter(like='second')
d10432second34sf
0 4
1 5
2 6
但是现在,我还需要获取每列的确切列名,这是我不知道的。我怎样才能做到这一点?
最佳答案
添加.columns
:
cols = df.filter(like='first').columns
print (cols)
Index(['d10432first34sf'], dtype='object')
或者更好boolean indexing
与 contains
:
cols = df.columns[df.columns.str.contains('first')]
print (cols)
Index(['d10432first34sf'], dtype='object')
时间不相同:
df = pd.DataFrame({'d10432first34sf':[1,2,3],'d10432second34sf':[4,5,6]})
df = pd.concat([df]*10000, axis=1).reset_index(drop=True)
df = pd.concat([df]*1000).reset_index(drop=True)
df.columns = df.columns + pd.Series(range(10000 * 2)).astype('str')
print (df.shape)
(3000, 20000)
In [267]: %timeit df.filter(like='first').columns
10 loops, best of 3: 117 ms per loop
In [268]: %timeit df.columns[df.columns.str.contains('first')]
100 loops, best of 3: 11.9 ms per loop
关于python - 获取特定列的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43631690/