A pd.Index
是列名的类似数组的容器,因此从某种意义上说,询问如何从索引中获取标签是没有意义的,因为索引is标签。
也就是说,您始终可以使用以下命令获取底层 numpy 数组df.columns.values
,或者转换为 python 列表tolist()
正如@Mitch 所示。
就为什么在裸数组上使用索引而言 -Index
提供整个 pandas 中使用的额外功能/性能 - 其核心是基于哈希表的索引。
例如,考虑以下框架/列。
df = pd.DataFrame(np.random.randn(10, 10),
columns=list('abcdefghkm'))
cols = df.columns
cols
Out[16]: Index(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'k', 'm'], dtype='object')
现在假设您要选择列'h'
脱离框架。对于列的列表或数组版本,您可以循环遍历列以查找'h'
,即O(n)
在列数中 - 像这样:
for i, col in enumerate(cols):
if col == 'h':
found_loc = i
break
found_loc
Out[18]: 7
df.values[:, found_loc]
Out[19]:
array([-0.62916208, 2.04403495, 0.29498066, 1.07939374, -1.49619915,
-0.54592646, -1.04382192, -0.45934113, -1.02935858, 1.62439231])
df['h']
Out[20]:
0 -0.629162
1 2.044035
2 0.294981
3 1.079394
4 -1.496199
5 -0.545926
6 -1.043822
7 -0.459341
8 -1.029359
9 1.624392
Name: h, dtype: float64
随着Index
,pandas 构造了一个列值的哈希表,因此找到 'h' 的位置是一个摊销O(1)
操作,通常要快得多,特别是当列数很大时。
df.columns.get_loc('h')
Out[21]: 7
此示例仅选择单个列,但正如 @ayhan 在评论中指出的那样,相同的哈希表结构还加速了许多其他操作,如合并、对齐、过滤和分组。