正如我在Pandas
中所知道的那样,使用loc
进行布尔选择比仅使用布尔选择进行布尔选择要快
这是我的实验:
第一个单列实验
%%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
的速度较慢...
我想知道为什么会出现这种性能差异
答案 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。