При работе с данными в Pandas почти всегда нужно объединять таблицы: подтянуть справочник, склеить данные по строкам или собрать несколько датафреймов в один. Для этого чаще всего используют merge(), join() и concat(). Главное — понимать, что именно вы объединяете.
merge() — объединение по ключам
Это аналог SQL JOIN. Используется, когда есть общие столбцы или ключи.
df1.merge(df2, on='id', how='inner')Основные параметры:
on— имя общего столбцаleft_on,right_on— если названия ключей отличаютсяhow— тип соединения:inner— только совпадающие строкиleft— все из левой таблицыright— все из правойouter— все строки из обеих таблиц
Пример:
users.merge(orders, on='user_id', how='left')Так можно подтянуть заказы к списку пользователей.
join() — удобное объединение по индексу
Чаще применяется, когда ключ уже находится в индексе.
df1.join(df2, how='left')Если нужно, можно указать столбец:
df1.join(df2.set_index('id'), on='id')Когда использовать:
- если работаете с индексами
- если нужен короткий синтаксис
- если объединяете несколько таблиц подряд
Важно: join() по сути тоже опирается на механику merge, но удобнее в индексных сценариях.
concat() — склейка по оси
Используется, когда не нужно искать совпадения по ключам, а надо просто соединить объекты.
По строкам:
pd.concat([df1, df2], axis=0)По столбцам:
pd.concat([df1, df2], axis=1)Полезные параметры:
ignore_index=True— пересоздать индексkeys=— добавить уровень иерархииjoin='inner'— оставить только общие столбцы
Пример:
pd.concat([jan, feb, mar], ignore_index=True)Так удобно собирать месячные выгрузки в одну таблицу.
Что выбрать 🤔
merge()— если есть ключи и нужна логика SQL JOINjoin()— если объединение идёт по индексуconcat()— если нужно склеить таблицы по строкам или столбцам без сопоставления ключей
Частые ошибки ⚠️
- дубли в ключах → неожиданный рост числа строк
- разные типы ключей (
intиstr) → merge не сработает как ожидается - пропуски после
left/outer join— это нормально, если совпадений нет concat()не заменяетmerge(): он не связывает записи по смыслу
Практический совет 💡
Перед объединением проверяйте:
df.info()
df['id'].duplicated().sum()Это помогает быстро найти проблемы с типами и дублями.
Хорошее правило: если думаете в терминах “по какому полю связать?” — нужен merge(). Если “просто склеить” — concat().
📚 В закрепе — мягко рекомендую посмотреть подборку каналов про IT: там полезные ресурсы по Pandas, аналитике данных и Python для практики.