用“ loc”选择熊猫布尔值并不总是更快?

时间:2018-10-01 01:39:42

标签: python pandas performance dataframe indexing

正如我在Pandas中所知道的那样,使用loc进行布尔选择比仅使用布尔选择进行布尔选择要快

这是我的实验:

enter image description here

第一个单列实验

%%timeit
df[df['종가']>9700]['시가총액']
>> 727 µs ± 2.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)


%%timeit
df.loc[df['종가']>9700, "시가총액"]
>> 362 µs ± 456 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)

使用loc的速度比我预期的快

具有多列的第二次实验

%%timeit
df[df['종가']>9700][['시가총액', '유통시가총액']]
>> 1.15 ms ± 22.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
df.loc[df['종가']>9700, ['시가총액', '유통시가총액']]
>>  1.47 ms ± 50 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

这一次,使用loc的速度较慢...

我想知道为什么会出现这种性能差异

1 个答案:

答案 0 :(得分:0)

  

使用loc的速度比我预期的快得多...这次,使用loc的速度较慢...我想知道为什么会发生这种性能差异。

没有什么可以说loc 应该更快。它可能比其他方法更快或更慢。 pd.DataFrame.loc中的逻辑和功能与pd.DataFrame.__getitem__非常不同,后者是语法糖[]调用的方法。

由于Pandas是开源的,因此您可以自己查看source code。由于具体实现可能会更改,恕不另行通知,因此,剖析API源代码通常不是一项富有成果的活动。

一个可能的原因是loc有许多用例,如Different Choices for Indexing所述,其功能与__getitem__不同。在您描述的用例中,应避免使用链式索引,该索引在文档中为explicitly discouraged

如果性能是一个问题,则可以考虑使用some alternatives