Логическое выделение панд с помощью `loc` не всегда быстрее? - PullRequest
0 голосов
/ 01 октября 2018

Как я знаю в 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 голосов
/ 01 октября 2018

Использование loc намного быстрее, чем я ожидал ... на этот раз использование loc медленнее ... Я хочу знать, почему произошла такая разница в производительности.

Нечего сказать, что loc должно быть быстрее.Это может быть быстрее или медленнее, чем другие методы.Логика и функциональность в pd.DataFrame.loc очень отличаются от pd.DataFrame.__getitem__, причем последний является методом, вызываемым синтаксическим сахаром [].

, поскольку Пандыс открытым исходным кодом, вы можете посмотреть исходный код самостоятельно.Поскольку реализации детали могут быть изменены без уведомления , распространение исходного кода API часто не является плодотворным занятием.

Одна потенциальная причина - loc имеет много вариантов использования, как объяснено в Различные варианты индексирования , с функциональностью, которая не идентична __getitem__.В описанном вами сценарии использования следует избегать цепной индексации, которая явно не рекомендуется в документации.

Если производительность является проблемой, вы можете рассмотреть некоторые альтернативы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...