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) необходимо для корректного решения задач, связанных с обработкой пропусков и восстановлением целостности данных.
