gpt4 book ai didi

python - pandas 中的索引对象——为什么 pd.columns 返回索引而不是列表

转载 作者:行者123 更新时间:2023-11-28 21:39:54 25 4
gpt4 key购买 nike

来自 R 背景,我发现 pandas 中对 Index 对象的(非常高)使用有点令人不安。例如,如果 train 是一个 pandas DataFrame,是否有一些特殊原因为什么 train.columns 应该返回一个 Index 而不是一个列表?如果它是一个 Index 对象,还有什么用途?根据 pandas.Index 的定义,它是所有 pandas 对象存储轴标签的基本对象。虽然 train.index.values 确实返回行标签 (axis=0),但如何从 pandas.index 获取列标签或列名称?与之前的问题不同,在这个问题中,我想到了一个具体的例子。

最佳答案

pd.Index 是列名称的类似数组的容器,因此从某种意义上说,询问如何从索引中获取标签是没有意义的,因为索引 < em>是标签。

也就是说,您始终可以使用 df.columns.values 获取底层 numpy 数组,或者使用 tolist() 转换为 python 列表,如@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 在评论中指出的那样,相同的哈希表结构还可以加速许多其他操作,如合并、对齐、过滤和分组。

关于python - pandas 中的索引对象——为什么 pd.columns 返回索引而不是列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46221280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com