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
与dict一样,数据帧的索引由哈希表支持。查找行 基于索引值就像基于键查找dict值一样。
相反,列中的值类似于列表中的值。
基于索引值查找行比基于列值查找行快。
例如,考虑
下面是如何查找
df['index']
列等于999的任何行。 Pandas必须遍历列中的每个值,才能找到等于999的值。下面是如何查找索引等于999的任何行。对于索引,Pandas使用散列值来查找行:
按索引查找行比按列值查找行快得多:
但是,请注意,建立索引需要时间:
所以只有当您有很多这种类型的查找时,才有索引是有利的 表演。
有时索引在重塑数据帧的形状中起作用。许多功能,如
set_index
,stack
,unstack
,pivot
,pivot_table
,melt
,lreshape
和crosstab
都使用或操作索引。 有时我们希望数据帧以不同的形状显示,或用于join
、merge
或groupby
操作。(正如您所注意到的,连接也可以基于列值完成,但是基于索引的连接更快。)在后台,join
、merge
和groupby
尽可能利用快速索引查找。时间序列有
resample
、asfreq
和interpolate
方法,它们的底层实现也利用了快速索引查找。所以最后,我认为索引有用性的来源,为什么它出现在这么多函数中,是因为它能够执行快速散列 查找。
相关问题 更多 >
编程相关推荐