当前位置: 首页 > 知识库问答 >
问题:

熊猫索引的意义是什么?

潘文乐
2023-03-14

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

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

共有1个答案

戈睿识
2023-03-14

与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

因此,只有当您有许多这种类型的查找要执行时,使用索引才是有利的。

有时索引在重塑数据帧方面起着作用。许多函数,如设置索引堆栈取消堆栈透视透视表熔化lreshape,以及交叉表,都使用或操作索引。有时我们希望数据帧具有不同的形状,以用于表示目的,或用于连接合并分组操作。(正如您所注意到的,也可以基于列值进行连接,但基于索引的连接速度更快。)在幕后,joinmergegroupby尽可能利用快速索引查找。

时间序列有重采样asfreq插值方法,其底层实现也利用了快速索引查找。

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

 类似资料:
  • 以下是生成数据帧的代码: 然后我得到了数据帧: 当我键入命令时: 我得到: 根据pandas的引用,axis=1表示列,我希望命令的结果是 所以我的问题是:熊猫的轴是什么意思?

  • 问题内容: 因此,我了解到可以使用DataFrame.groupby而不用使用MultiIndex进行子采样/横截面。 另一方面,当我在DataFrame上具有MultiIndex时,仍然需要使用DataFrame.groupby进行子采样/横截面。 那么,除了在打印时非常有用和漂亮地显示层次结构之外,MultiIndex有什么好处? 问题答案: 在pandas 0.4版本中引入了分级索引(也称为

  • 问题内容: 我已经做过这样的事情才能使用: 而且效果还不错。我只是不确定索引名称的目的-在这种情况下为“ blah”。我读过的东西说要用一个,但我不知道为什么。它似乎没有用在查询中,尽管如果导出架构可以看到它。 那么…索引名称的作用是什么?如果它有助于最终的行看起来像: 问题答案: 索引名称用于引用索引以用于将来的命令。像掉落指数。 http://dev.mysql.com/doc/refman/

  • 问题内容: 假设我用两列(一个DateTime)和一个(整数)创建了一个熊猫DataFrame 。现在,我想根据第一列()中的值创建一个DatetimeIndex : 一切似乎都正常,除了我打印DataFrame时,它说它具有Int64Index。 我是在做错事还是不正确理解Indeces的概念? 问题答案: 没有就位(除非您通过)。否则一切正确 同样作为参考,在即将到来的0.12版本(下周)中,

  • 问题内容: 我有一个带有列“ A”和“ B”的多索引数据框。 有没有一种方法可以通过在多索引的一列上进行过滤而不选择将索引重新设置为单列索引来选择行? 例如。 问题答案: 一种方法是使用Index方法: 在0.13,你就可以使用与参数: 注意:如果这是列MultiIndex而不是索引,则可以使用相同的技术:

  • 问题内容: 我在pandas中有一个数据框,我试图找出其值的类型。我不确定column的类型是什么。但是,当我跑步时,我得到了; 这是什么意思? 问题答案: 它的意思是: 来源。 第一个字符指定数据的类型,其余字符指定每个项目的字节数,Unicode除外,Unicode将其解释为字符数。项目大小必须与现有类型相对应,否则将引发错误。支持的类型为现有类型,否则将引发错误。支持的种类有: