【问题标题】:Pandas boolean selection with `loc` is not always faster?带有`loc`的熊猫布尔选择并不总是更快?
【发布时间】:2019-03-06 02:54:25
【问题描述】:

据我在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 比较慢...

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

【问题讨论】:

标签: python pandas performance dataframe indexing


【解决方案1】:

使用loc 比我预期的要快得多...这一次,使用loc 更慢...我想知道为什么会出现这种性能差异。

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

由于 Pandas 是开源的,您可以自己查看source code。由于实现细节可能会在没有通知的情况下更改,因此剖析 API 源代码通常不是一项富有成果的活动。

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

如果性能有问题,可以考虑some alternatives

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 2021-02-07
    • 2016-09-10
    • 2014-11-05
    • 2022-06-27
    • 2020-02-11
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多