Открыть сервисСервис

Pandas merge: объединение DataFrame

Pandas merge — это метод библиотеки Pandas языка программирования Python, предназначенный для объединения двух объектов DataFrame (или Series) по одному или нескольким ключам (столбцам или индексам), аналогично операции JOIN в языке структурированных запросов SQL. Метод позволяет создавать новые таблицы, комбинируя строки на основе логических связей между исходными наборами данных, что является фундаментальной операцией при подготовке и анализе данных.

Основные параметры метода

Метод вызывается как df1.merge(df2, ...) или через функцию pd.merge(df1, df2, ...). Ключевые параметры определяют логику и способ соединения таблиц.

Параметр how

Параметр how задаёт тип соединения, определяющий, какие строки из левого (df1) и правого (df2) DataFrame попадут в результат:

  • 'inner' — внутреннее соединение. В результат включаются только строки, у которых ключи совпадают в обеих таблицах. Это значение используется по умолчанию.
  • 'left' — левое внешнее соединение. Включаются все строки из левой таблицы. Для строк без совпадений в правой таблице соответствующие значения заполняются пропусками (NaN).
  • 'right' — правое внешнее соединение. Включаются все строки из правой таблицы, аналогично левому соединению, но с противоположной стороны.
  • 'outer' — полное внешнее соединение. Включаются все строки из обеих таблиц; отсутствующие значения заполняются пропусками.

Параметр on

Параметр on принимает имя столбца (или список имён), по которому производится соединение. Этот столбец должен присутствовать в обоих DataFrame. Если параметр не указан, Pandas автоматически использует пересечение общих столбцов в качестве ключей соединения.

Параметры left_on и right_on

Используются, когда имена ключевых столбцов в объединяемых таблицах различаются. left_on задаёт столбец в левом DataFrame, right_on — в правом. После объединения в результате могут остаться оба исходных столбца с разными именами, если не указать параметр suffixes.

Параметр suffixes

Кортеж из двух строк, который добавляется к названиям пересекающихся (но не ключевых) столбцов, чтобы различать их происхождение. По умолчанию используется ('_x', '_y'). Например, при наличии столбца value в обеих таблицах, в результате появятся столбцы value_x и value_y.

Параметр left_index и right_index

Логические параметры (True/False), позволяющие использовать индекс строки DataFrame в качестве ключа соединения вместо столбца. Можно комбинировать индекс одной таблицы со столбцом другой, задавая left_on и right_index=True (или наоборот).

Типы соединений и семантика

В отличие от метода concat, который объединяет таблицы по вертикали или горизонтали без изменения логики строк, merge реализует реляционную алгебру. При соединении по ключу возможна ситуация декартова произведения внутри групп: если в обеих таблицах встречается несколько строк с одинаковым значением ключа, то в результате будет создано количество строк, равное произведению числа таких строк в левой и правой таблицах. Такое поведение называется «многие ко многим» (many-to-many) и часто требует последующей агрегации для устранения дублирования.

Пример использования

Рассмотрим простой пример на русском языке. Пусть имеется таблица employees (сотрудники) с колонками id и name, и таблица salaries (зарплаты) с колонками emp_id и amount. Для получения полной информации о сотрудниках и их зарплатах используется левое соединение:

```python import pandas as pd

employees = pd.DataFrame({'id': [1, 2, 3], 'name': ['Иван', 'Петр', 'Сидор']}) salaries = pd.DataFrame({'emp_id': [1, 2], 'amount': [50000, 60000]})

result = employees.merge(salaries, left_on='id', right_on='emp_id', how='left') ```

В результате получится таблица, содержащая всех сотрудников, а для сотрудника с id=3 (Сидор) значение amount будет равно NaN, так как записи о его зарплате нет.

Отличия от метода join

Метод DataFrame.join является удобной обёрткой над merge, которая по умолчанию использует индексы для соединения (left_index=True, right_index=True). Он менее гибок в настройке ключей, но удобен для быстрого объединения таблиц по индексу. Для соединения по произвольным столбцам с явным контролем параметров предпочтительнее использовать merge.

Практические рекомендации

При работе с большими данными важно следить за типами ключевых столбцов: они должны совпадать (например, оба столбца должны иметь тип int64 или object со строками), иначе соединение может не найти совпадений. Перед выполнением операции рекомендуется проверять наличие дубликатов в ключах, так как это может привести к неожиданному росту размера результирующей таблицы. Для ускорения работы с очень большими наборами данных можно использовать параметр sort=False, отключающий сортировку результата по ключу, которая выполняется по умолчанию.

Применение в анализе данных

Операция слияния является одной из наиболее часто используемых при работе с реляционными данными в Python. Она применяется для обогащения таблиц справочной информацией, объединения данных из разных источников (например, файлов Excel, CSV или SQL-запросов), а также для подготовки данных к машинному обучению. Понимание семантики различных типов соединений (inner, left, right, outer) необходимо для корректного решения задач, связанных с обработкой пропусков и восстановлением целостности данных.

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru