Найти в Дзене
Заходи в Ай-Ти

Рассказываю как ускорить циклы в 60 раз Python (pandas)

Оглавление

Недавно я экспериментировал с циклами в Python и понял, что использование 'iloc' / 'loc' внутри циклов требует много времени для выполнения. Следующий вопрос заключался в том, почему «loc» занимает слишком много времени и какова альтернатива «loc»?

В этой статье мы ответим на эти вопросы, рассмотрев несколько практических примеров.

Что такое loc — если вы еще не знаете!

Функция loc[] — это функция pandas, которая используется для доступа к значениям внутри DataFrame с использованием индекса строки и имени столбца. Он используется, когда вы знаете, к какой строке и столбцу вы хотите получить доступ.

Давайте разберемся с loc на примере. У нас есть следующий DataFrame pandas с именем df (показан ниже), и мы хотим получить доступ к значению, соответствующему второй строке в столбце «a», то есть 10.

DataFrame
DataFrame

Мы можем получить доступ к значению, используя следующий код:

-2

Аналогично, iloc используется для доступа к значению с использованием индекса и номеров столбцов.

-3

Таким образом, функция loc используется для доступа к столбцам с использованием имен столбцов, а функция iloc используется для доступа к столбцам с использованием индексов столбцов.

Читайте также: Рассказываю как "спарсить" изображения в Telegram с помощью Python

Что происходит, если вы используете loc/iloc с циклами в Python?

Представьте себе, что мы хотим добавить новый столбец «c», который равен сумме значений столбца «a» и столбца «b», в наш DataFrame df.

Используя цикл for, мы можем перебрать наш DataFrame и добавить новый столбец «c», используя функцию loc, как показано ниже:

-4

Время, необходимое для перебора и обновления значений с помощью loc, составляет около 40 минут, что очень много.

Использование «at» вместо «loc».

Мы можем выполнить ту же самую манипуляцию, заменив «loc» на «at» (или заменив «iloc» на «iat»), как показано ниже.

-5

Код выполняется примерно за 0,7 минуты , что в 60 раз быстрее по сравнению со временем, затрачиваемым функцией loc.

«loc» против «at», откуда разница во времени выполнения?

  • 'at' / 'iat'

at и iat предназначены для доступа к скаляру, то есть к одному элементу в DataFrame, как показано ниже:

-6

Если мы попытаемся получить доступ к серии с помощью at и iat, то выдается ошибка, как показано ниже:

# Это приведет к ошибке, поскольку мы пытаемся получить доступ к #нескольким строкам
-> df.at[: 3 , 'a' ]
#ValueError: Индексация на основе целочисленного индекса может иметь только целочисленные индексаторы
  • ‘loc’ / ‘iloc’

loc и iloc предназначены для одновременного доступа к нескольким элементам (сериям/кадрам данных), потенциально для выполнения векторизованных операций.

-7

at используется для доступа к значению масштабатора, поэтому он является более легким (быстрая реализация) по сравнению с loc тем, который используется для доступа к серии/датафрейму, и, следовательно, занимает больше места и времени.

Заключение

Использование 'loc' / 'iloc' внутри циклов Python неоптимально, и его следует избегать. Вместо этого мы должны использовать «at» / «iat» везде, где это необходимо, поскольку они намного быстрее по сравнению с «loc» / «iloc».

.

❤️ Если вам понравилась статья, ставьте лайк и подписывайтесь на мой канал "Заходи в Ай-Ти".

👍 Если у вас остались вопросы или есть интересные темы, которые вы хотите, чтобы я разобрал, то пишите в комментариях. Ваше мнение очень важно для меня!

.

#pandas python