Pandas
Как работает DataFrame.apply и когда его не стоит использовать?
DataFrame.apply вызывает функцию для каждой колонки при axis=0 или для каждой строки при axis=1; форма результата зависит от возвращаемого значения и параметров. Он удобен для логики, которую трудно выразить иначе, но row-wise Python-функция часто медленна. Сначала ищут векторную операцию, метод строк или дат, where, map, join либо groupby. apply не гарантирует магического ускорения и может скрыть проблемы типов. Производительность проверяют на реальном объеме.
Ссылки для изучения
Когда использовать pandas.concat, а когда merge?
concat соединяет готовые объекты вдоль оси. По axis=0 складывает строки и выравнивает колонки, по axis=1 ставит колонки рядом и выравнивает индекс. При вертикальном объединении часто нужен ignore_index=True. merge выполняет реляционное соединение по ключам с inner, left, right или outer и может размножить строки при many-to-many. Поэтому concat выбирают для однородных частей, merge для сопоставления сущностей, предварительно проверив ключи и ожидаемую кардинальность.
Ссылки для изучения
Когда в pandas использовать dtype category?
category полезен для повторяющихся значений с относительно низкой кардинальностью: Pandas хранит коды и отдельный набор категорий, что часто экономит память и ускоряет groupby или сортировку. Можно зафиксировать допустимые категории и их порядок. Неизвестное значение после приведения к заданному dtype станет NaN, это надо контролировать. Для почти уникальных строк экономии может не быть, а операции добавления новых значений сложнее. category описывает внутреннее представление, а не автоматически смысл порядковой шкалы.
Ссылки для изучения
Как поэлементно преобразовать значения DataFrame?
Для поэлементного преобразования всего DataFrame в современных версиях Pandas используют DataFrame.map; прежнее имя applymap устарело. Series.map преобразует одну Series функцией, словарем или другой Series. apply работает по строкам или столбцам, а не просто по каждому скаляру. Перед Python-функцией стоит поискать векторную операцию, она обычно быстрее и яснее. Обработку NaN задают явно, например через na_action='ignore', если вызываемая функция не должна получать пропуски.
Ссылки для изучения







