Выбор ответа Middle Производительность и память обновлено

iterrows против itertuples

Вопрос

Если цикл по строкам действительно нужен, что выбрать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: itertuples: не создаёт Series на строку и в разы быстрее. iterrows на каждой строке создаёт Series и приводит значения к общему типу, это медленно и может испортить типы (int станет float). itertuples отдаёт лёгкие именованные кортежи.

Варианты ответа

  1. iterrows: он быстрее и сохраняет типы значений в строке
  2. Без разницы: все способы обхода строк одинаково медленные
  3. for i in range(len(df)): df.iloc[i], без лишних объектов
  4. itertuples: не создаёт Series на строку и в разы быстрееправильный ответ

Разбор

iterrows на каждой строке создаёт Series и приводит значения к общему типу, это медленно и может испортить типы (int станет float). itertuples отдаёт лёгкие именованные кортежи. Цикл с iloc[i] самый медленный из всех. Но сначала стоит подумать, нельзя ли обойтись без цикла.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.