Pandas索引的意义是什么?

2024-05-21 06:25:21 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能给我指一个链接或解释熊猫索引的好处吗?我经常处理表,并根据列将它们连接起来,而这个连接/合并过程似乎无论如何都要对事物重新编制索引,所以考虑到我认为我不需要这样做,应用索引标准有点麻烦

关于索引的最佳实践有什么想法吗


Tags: 标准链接过程事物处理表
1条回答
网友
1楼 · 发布于 2024-05-21 06:25:21

与dict一样,数据帧的索引由哈希表支持。查找行 基于索引值类似于基于键查找dict值

相反,列中的值类似于列表中的值

基于索引值查找行比基于列值查找行快

例如,考虑

df = pd.DataFrame({'foo':np.random.random(), 'index':range(10000)})
df_with_index = df.set_index(['index'])

下面是如何查找df['index']列等于999的任何行。 Pandas必须循环遍历列中的每个值,以找到等于999的值

df[df['index'] == 999]

#           foo  index
# 999  0.375489    999

下面是如何查找索引等于999的任何行。对于索引,Pandas使用哈希值查找行:

df_with_index.loc[999]
# foo        0.375489
# index    999.000000
# Name: 999, dtype: float64

按索引查找行比按列值查找行快得多:

In [254]: %timeit df[df['index'] == 999]
1000 loops, best of 3: 368 µs per loop

In [255]: %timeit df_with_index.loc[999]
10000 loops, best of 3: 57.7 µs per loop

但是请注意,建立索引需要时间:

In [220]: %timeit df.set_index(['index'])
1000 loops, best of 3: 330 µs per loop

因此,只有当您有许多这种类型的查找时,索引才是有利的 表演

有时索引在重塑数据帧方面起着作用。许多函数,例如set_indexstackunstackpivotpivot_tablemeltlreshapecrosstab都使用或操作索引。 有时,出于表示的目的,或者为了joinmergegroupby操作,我们希望数据帧具有不同的形状。(正如您所注意到的,也可以基于列值进行连接,但是基于索引的连接速度更快。)在幕后,joinmergegroupby尽可能利用快速索引查找

时间序列有resampleasfreqinterpolate方法,它们的底层实现也利用了快速索引查找

所以最后,我认为索引的有用性的起源,为什么它会出现在这么多函数中,是因为它能够执行快速散列 查找

相关问题 更多 >