为什么在设置索引时使用reset_index(drop = True)要快得多?

时间:2018-05-09 09:31:08

标签: python pandas indexing series

为什么我会使用reset_index(drop=True),当替代方案更快?我确信有些东西我不知道了。 (或者我的时间安排不好......)

import pandas as pd

l = pd.Series(range(int(1e7)))

%timeit l.reset_index(drop=True)
# 35.9 ms +- 1.29 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)

%timeit l.index = range(int(1e7))
# 13 us +- 455 ns per loop (mean +- std. dev. of 7 runs, 100000 loops each)

1 个答案:

答案 0 :(得分:4)

重置索引的代价高昂的操作不是创建新索引(如您所示,这是超快),而是返回该系列的副本。如果你比较:

%timeit l.reset_index(drop=True)
22.6 ms ± 172 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit l.index = range(int(1e7))
14.7 µs ± 348 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit l.reset_index(inplace=True, drop=True)
13.7 µs ± 121 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

您可以看到inplace操作(没有返回副本)或多或少与您的方法一样快。但是,执行就地操作是generally discouraged