python – 大熊猫索引的重点是什么?

有人能指出我的链接或解释大熊猫索引的好处吗?我经常处理表并根据列加入它们,这个加入/合并过程似乎无论如何重新索引事物,所以考虑到我认为不需要,应用索引标准有点麻烦.

有关索引的最佳实践的任何想法?

解决方法:

像dict一样,DataFrame的索引由哈希表支持.查找行
基于索引值就像基于键查找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

因此,当您有许多此类型的查找时,拥有索引是有利的
去表演.

有时索引在重塑DataFrame中起作用.许多函数,如set_index,stack,unstack,pivot,pivot_table,melt,
lreshape和交叉表,都使用或操纵索引.
有时我们希望DataFrame具有不同的形状以用于演示目的,或者用于连接,合并或分组操作. (正如您所说,加入也可以基于列值完成,但基于索引的加入更快.)在幕后,加入,合并和groupby尽可能利用快速索引查找.

时间序列具有resample,asfreq和interpolate方法,其底层实现也利用快速索引查找.

所以最后,我认为索引的有用性的起源,为什么它出现在如此多的函数中,是由于它能够执行快速哈希
查找.

上一篇:如何在MySQL中查看数据库或表的索引?


下一篇:python – 按整数索引选择一行pandas系列/ dataframe