Python: Pandas
2026-02-26 16:30 Diff

В работе с данными приходится собирать их из разных источников и объединять в единую структуру. В библиотеке Pandas реализован функционал для таких операций над табличными данными в виде методов:

  • concat()
  • join()
  • merge()

На данном уроке рассмотрим практические случаи, в которых они применяются.

Метод concat()

За основу возьмем данные о кликах на сайтах 4 магазинов за 28 дней.

Разобьем исходные данные на два датафрейма за первую и вторую недели месяца. Это операция делается с использованием срезов.

Операция, обратная разбиению — конкатенация, применяется, чтобы собрать куски данных в единый фрагмент. Если предположить, что отчетные материалы за разные недели лежат в разных таблицах, а для аналитика необходимо поработать над всеми значениями сразу, то можно использовать метод concat(). В качестве параметров ему передается список тех датасетов, которые необходимо объединить:

Рассмотрим ситуацию, в которой данные разбиты по парам магазинов. Возможно, это данные из разных городов, и лежат они в разных таблицах баз данных:

Чтобы собрать их в единое целое, применяется метод concat(), но указывается направление объединения с помощью параметра axis:

  • 0 - объединение происходит по строкам
  • 1 - по столбцам

Стоит быть внимательными с направлением объединения. Если его не указать в данном примере, то результат будет не тот, который ожидается:

Фрагменты данных наподобие срезов по неделям и парам магазинов довольно типичная ситуация. Однако бывают случаи, когда срезы делаются по разным пересекающимся промежуткам времени. Рассмотрим данные кликов для пар магазинов за пять рабочих дней:

Здесь дни месяца не совпадают, но пересекаются. Для объединения также используется метод concat(), который объединит по соответствующим индексам и оставит пропуски в тех днях, для которых значений нет.

Метод join()

Метод concat() позволяет производить операции конкатенации по направлениям. Однако при работе с данными часто требуется более сложное объединение по индексам. Одним из методов для таких операций является метод join():

Важно отметить, что join() — это метод объекта DataFrame, который позволяет объединять два датафрейма по индексам. При этом результат зависит от того, к какому датафрейму применяется метод. Если поменять местами датафреймы в примере выше, результат будет отличаться:

В примерах выше результирующий датафрейм содержит все индексы того датафрейма, к которому применялся метод. Такой способ объединения соответствует left join и применяется по умолчанию. Метод join() поддерживает различные сценарии объединения, включая:

  • inner join — объединение по пересечению индексов
  • left join — включает все индексы левого датафрейма
  • right join — включает все индексы правого датафрейма
  • outer join — объединение по всем индексам обоих датафреймов

Для их использования задаётся параметр how:

left join:

right join:

inner join:

outer join:

Метод join() работает по индексам по умолчанию, но можно указывать конкретные колонки через параметр on. Если нужно объединять по колонкам с разными названиями, лучше использовать merge().

Метод merge()

Объединение данных можно производить не только по индексам, но и по столбцам значений двух датафреймов. Для этого не достаточно функционала метода join(), который может производить объединения по индексам датафреймов. Для таких случаев в Pandas используется метод merge().

Рассмотрим датасет с кликами, в котором дни месяца указаны в столбце day, а не в индексе строк:

Будем решать задачу по объединению двух датасетов, содержащих пятидневные срезы по парам магазинов:

Для их объединения необходимо указать сперва левый, а затем правый датафреймы. Также нужно определить по каким столбцам в каждом из датафреймов будет происходить объединение.

Также как и в методе join() в методе merge() поддерживаются различные сценарии объединения данных:

inner merge:

left merge:

right merge:

outer merge:

Метод merge() чаще используется для объединения по колонкам, а join() — по индексам. Можно объединять по нескольким колонкам одновременно, передав список: on=['key1','key2']. Метод merge() полностью аналогичен SQL JOIN по типу объединения (inner, left, right, outer).

Выводы

На данном уроке мы познакомились с различными методами Pandas для объединения табличных данных. Рассмотренные методы применяются по мере усложнения производимой операции:

  • concat() - данные объединяются по строкам или по столбцам с сохранением всех значений
  • join() - объединяюся датафреймы по индексам
  • merge() - объединяются датафреймы по наборам столбцов

Как мы увидели, методы join() и merge() поддерживают при этом различные сценарии объединений. Используя набор данных методов, аналитик может собирать довольно сложные таблицы по набору фрагментов данных.