Выбор ответа Middle merge, join и concat обновлено

concat в цикле

Вопрос

Код в цикле на 50 000 итераций делает df = pd.concat([df, row_df]). Что не так?

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

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

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

Коротко

Правильный ответ: Каждая итерация копирует весь DataFrame, время растёт как n². Каждый concat создаёт новый DataFrame и копирует все данные, итог O(n²).

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

  1. Ничего: concat оптимизирован под добавление строк в конец
  2. Каждая итерация копирует весь DataFrame, время растёт как n²правильный ответ
  3. concat не сохраняет порядок строк и перемешивает индекс
  4. Нужно заменить на df.append(row_df), он быстрее в цикле

Разбор

Каждый concat создаёт новый DataFrame и копирует все данные, итог O(n²). Правильно: собрать строки в список (словарей или DataFrame) и один раз сделать pd.DataFrame(list) или pd.concat(list). Порядок concat сохраняет. DataFrame.append удалён в pandas 2.0 и тоже копировал всё.

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

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