Объединение датасетов pandas: concat, merge и join
Содержание статьи
- Объединение датасетов pandas
- Основные способы объединения датасетов в Pandas
- Функция concat для вертикального и горизонтального объединения
- Метод merge: объединение по ключевым колонкам
- Параметры how в merge: inner, outer, left и right
- Объединение датасетов с разными именами колонок
- Работа с дубликатами при объединении датасетов
- Обработка пропущенных значений после объединения
- Практические примеры объединения датасетов в Pandas
- Типичные ошибки при объединении датасетов и их решение
- Сравнение concat и merge: когда что использовать
Объединение датасетов pandas
Объединение датасетов pandas — базовая операция при работе с табличными данными. Она позволяет соединять несколько таблиц в одну по общим столбцам или индексам. В библиотеке для этого предусмотрены функции merge(), join() и concat(). Каждая из них решает свою задачу: первая работает по ключевым полям, вторая — по индексам, третья — просто склеивает объекты по оси. Выбор подходящего инструмента зависит от структуры исходных данных и желаемого результата.
Основные способы объединения датасетов в Pandas
В библиотеке Pandas предусмотрено несколько механизмов соединения табличных данных. Выбор конкретного инструмента зависит от структуры исходных объектов и желаемого результата. Условно их можно разделить на три группы: конкатенация, слияние по ключам и присоединение через индексы.
Каждый подход решает свою узкую задачу, поэтому важно понимать различия между ними ещё до начала работы с реальными данными.
- concat() — простое склеивание объектов по вертикали или горизонтали без учёта совпадений.
- merge() — SQL-подобное соединение строк по одному или нескольким столбцам.
- join() — удобный метод для объединения по индексам, часто используется как обёртка над merge.
Ниже разберём каждый вариант подробнее.
Функция concat для вертикального и горизонтального объединения
В pandas concat() — базовый инструмент склейки таблиц. Она работает и по строкам, и по столбцам, в зависимости от параметра axis.
- Вертикально (
axis=0): просто дописывает строки одного фрейма под строки другого. Полезно, когда данные разбиты по периодам или источникам. - Горизонтально (
axis=1): соединяет колонки, выстраивая их рядом. Так удобно добавлять новые признаки к существующей выборке.
При этом важно помнить про ignore_index: если не сбросить индексы, в итоговой таблице появятся дублирующиеся номера строк, что часто ломает дальнейшие операции.
Метод merge: объединение по ключевым колонкам
Функция merge() работает по аналогии с SQL-соединениями. Она сопоставляет строки по значениям в указанных столбцах, которые выступают своеобразными «ключами». Это удобно, когда нужно связать данные из разных источников по общему идентификатору, например, по номеру заказа или коду клиента.
Базовый синтаксис выглядит так:
df_merged = df1.merge(df2, on='ключевая_колонка')
Если имена столбцов в таблицах различаются, укажите их явно через параметры left_on и right_on. По умолчанию выполняется внутреннее соединение (inner), но доступны и другие типы: left, right, outer. Тип задаётся аргументом how.
Параметр suffixes помогает различать одноимённые колонки из разных фреймов, добавляя к ним указанные суффиксы. Это избавляет от путаницы, когда в обеих таблицах есть, скажем, столбец «цена».
Параметры how в merge: inner, outer, left и right
Аргумент how определяет, какие строки попадут в итоговую таблицу. Разница сводится к логике сопоставления ключей.
- inner — только совпадающие записи с обеих сторон.
- outer — все строки, недостающие значения заполняются NaN.
- left — сохраняются все строки левого фрейма.
- right — зеркально: всё из правого.
Выбор зависит от того, какие данные критичны для анализа.
Объединение датасетов с разными именами колонок
Когда у двух таблиц названия столбцов не совпадают, но по смыслу они означают одно и то же, на помощь приходит параметр left_on и right_on. Указываете в первом аргументе имя поля из левого фрейма, во втором — из правого. Соединение произойдёт по этим разным заголовкам, а дублирующиеся колонки останутся в результате с суффиксами _x и _y.
Пример:
pd.merge(df1, df2, left_on='id_пользователя', right_on='user_id', how='inner')
Если нужно избавиться от лишнего столбца-дубля, просто удалите его после слияния через drop().
Работа с дубликатами при объединении датасетов
При слиянии таблиц нередко появляются повторяющиеся строки. Чтобы их выявить, удобно использовать метод duplicated(), а для удаления — drop_duplicates(). Однако важно помнить: дубликаты могут быть как полными, так и частичными, когда совпадают лишь отдельные колонки. В таких случаях стоит заранее определить, какие поля считать ключевыми, иначе легко потерять нужные данные. Иногда проще оставить повторы, но добавить столбец-счётчик, чтобы отследить происхождение каждой записи.
Обработка пропущенных значений после объединения
После слияния таблиц часто появляются пустые ячейки. Это нормально: например, при внешнем соединении строки без пары получают NaN. Сначала оцените масштаб проблемы через isna().sum().
Дальше действуйте по ситуации:
- Если пропусков мало — удалите их методом
dropna(). - Для числовых колонок подойдёт заполнение средним или медианой через
fillna(). - Категориальные поля логично заполнить модой или константой вроде «не указано».
Не забывайте про параметр indicator=True в merge() — он показывает происхождение каждой строки и упрощает диагностику.
Практические примеры объединения датасетов в Pandas
Разберём несколько типовых сценариев. Например, нужно добавить к таблице с заказами информацию о клиентах из справочника. Здесь пригодится merge() с указанием общего столбца. А если требуется просто склеить два набора данных с одинаковой структурой — используйте concat(). Для наглядности:
- Соединение по ключу —
pd.merge(df1, df2, on='id'). - Добавление строк —
pd.concat([df1, df2], ignore_index=True). - Соединение по индексу —
df1.join(df2, how='left').
Этих приёмов достаточно для большинства повседневных задач.
Типичные ошибки при объединении датасетов и их решение
Чаще всего спотыкаются о несовпадение типов в ключевых колонках: в одной таблице идентификатор хранится как число, в другой — как строка. Результат — пустые значения после слияния. Лечится приведением типов через astype().
Вторая частая беда — дубликаты в ключах. Если в правом фрейме несколько одинаковых id, строки размножатся. Стоит заранее проверить уникальность через duplicated().
Полезно помнить про параметр validate: он подсветит неожиданные соотношения записей ещё на этапе операции.
Сравнение concat и merge: когда что использовать
Выбор между этими функциями сводится к геометрии соединения. concat просто складывает таблицы друг под другом или рядом, если совпадают колонки или индексы. merge работает как SQL-джойн: он связывает строки по значениям общего столбца.
Проще говоря:
- concat — для вертикального или горизонтального склеивания однотипных данных.
- merge — для обогащения одной таблицы данными из другой по ключу.
Если нужно просто добавить строки из нового месяца — берите concat. Если подтягиваете цены к заказам по ID товара — merge.