Найти в Дзене
NTA

ОБЪЕДИНЕНИЕ ТАБЛИЦ В PANDAS: MERGE, JOIN И CONCATENATE

Автор Мария Сафронова, г. Екатеринбург
Автор Мария Сафронова, г. Екатеринбург

Люди, которые работают с sql, знают, что для объединения таблиц используется операция join. В библиотеке Pandas также предусмотрен join, но помимо него, есть еще такие табличные функции объединения, как merge и concatenate. Когда только-только знакомишься с этими функциями разница между ними неочевидна, поэтому я предлагаю вам краткий обзор отличительных особенностей всех этих операций.

Join

DataFrame.join(self, other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

Из трех операций объединения датафреймов join является наиболее простым и предлагает минимум «средств управления» объединения ваших таблиц.

Он объединит все столбцы из двух таблиц с общими столбцами, переименованными в определенные lsuffix и rsuffix. Способ объединения строк из двух таблиц определяется с помощью how – inner, outer, right, left (по умолчанию) аналогично sql. Визуализировать понимание соединения таблиц всеми этими способами могут схемы, изображенные с помощью кругов Эйлера:

-2

Рассмотрим как работает объединение с помощью Join на примере:

df1 = pd.DataFrame({'A': ['5', '87', '42', '43'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'A1': ['43', '3', '80', '5'],
'B1': ['B4', 'B5', 'B6', 'B7'],
'C1': ['C4', 'C5', 'C6', 'C7'],
'D1': ['D4', 'D5', 'D6', 'D7']})

Merge

DataFrame.merge(self, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

Аналогично предыдущей функции merge также объединяет все столбцы из двух таблиц с общими столбцами, переименованными в определенные suffixes. Но в отличие от join, merge уже предлагает три способа организации построчного выравнивания. Первый способ заключается в использовании on = «НАЗВАНИЕ СТОЛБЦА», в этом случае столбец должен быть общим столбцом в обеих таблицах. Второй способ — использовать left_on = «НАЗВАНИЕ СТОЛБЦА» и right_on = «НАЗВАНИЕ СТОЛБЦА». Такой способ позволяет объединить две таблицы, используя два разных столбца. Третий способ — использовать left_index = True и right_index = True, в данном случае таблицы будут объединены по индексам.

Рассмотрим на примере:

df2 = pd.DataFrame({'A1': ['43', '3', '80', '5'],
'B1': ['B0', 'B1', 'B5', 'B3'],
'C1': ['C4', 'C5', 'C6', 'C7'],
'D1': ['D4', 'D5', 'D6', 'D7']})
df1 = pd.DataFrame({'A': ['5', '87', '42', '43'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
-3
-4

Concatenate

pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)

В отличии от join и merge, которые по умолчанию работают со столбцами, concat позволяет выбрать, хотим ли мы выполнять объединение по столбцам или по строкам. Для этого в аргументе функции необходимо прописать axis=0 или axis=1, в первом случае вторая таблица будет присоединена к первой снизу, во втором – справа.

Рассмотрим на примере:

df2 = pd.DataFrame({'A1': ['43', '3', '80', '5'],
'B1': ['B0', 'B1', 'B5', 'B3'],
'C1': ['C4', 'C5', 'C6', 'C7'],
'D1': ['D4', 'D5', 'D6', 'D7']})
df1 = pd.DataFrame({'A': ['5', '87', '42', '43'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
-5
-6

Append

DataFrame.append(self, other, ignore_index=False, verify_integrity=False, sort=False)

Напоследок будет уместно упомянуть такую функцию как append().  Она несколько выбивается из перечня ранее упомянутых функций, но тем не менее ее также можно считать инструментом объединения таблиц. Append() используется для добавления строк одного датафрейма в конец другого, возвращая новый датафрейм. Столбцы, не входящие в исходный датафрейм, добавляются как новые столбцы, а новые ячейки заполняются значениями NaN.

Рассмотрим на примере:

df2 = pd.DataFrame({'A1': ['43', '3', '80', '5'],
'B1': ['B0', 'B1', 'B5', 'B3'],
'C1': ['C4', 'C5', 'C6', 'C7'],
'D1': ['D4', 'D5', 'D6', 'D7']})
f1 = pd.DataFrame({'A': ['5', '87', '42', '43'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
-7

Мы рассмотрели основные различия функций объединения датафреймов в Pandas. Join и merge работают со столбцами, и переименовывает общие столбцы, используя заданный суффикс. Но merge позволяет более гибко настроить построчное выравнивание. В отличии от join и merge, concat позволяет работать как со столбцами, так и со строками, но не дает переименовывать строки/столбцы.

Читайте также:

Рекомендуем почитать
Пайпы и именованные пайпы в Linux.
Пайпы — одна из наиболее полезных возможностей командной строки в Linux и Unix-подобных операционных системах. Они находят применение в различных приложениях. Если вы посмотрите любую статью про командную строку в Linux, то скорее всего вы встретите в ней использование пайпов. Символ вертикальной черты » | «обозначает пайп. Благодаря пайпу вы можете взять вывод одной команды и передать его другой команде в качестве ввода. Таким образом, вывод одной команды может использоваться как ввод для другой, а результат этой команды — как ввод для следующей, и так далее...
Avahi и mDNS: магия сетевого обнаружения в Linux
Представьте, что у вас дома вечеринка. Все гости – это устройства в вашей сети: компьютеры, принтеры, медиасерверы, смартфоны. Но есть проблема: никто не знает, как друг друга найти. Обычно, чтобы подключиться к какому-нибудь устройству, нужно помнить его IP-адрес (а кто вообще запоминает 192.168.1.57?). Вот тут на сцену выходит Avahi и mDNS – такие себе вечеринщики, которые ходят по комнате и всем представляют друг друга: – «Привет, я принтер HP, меня можно найти по имени hp.local!» – «А я медиасервер! Ищу компанию для стриминга фильмов, зовите меня plex...
Bash или Zsh: что выбрать для своего Linux?
В этой статье мы рассмотрим боли выбора между Bash и Zsh. Узнай, что такое шеллы, их отличия, плюсы и минусы, и какой выбрать для комфортной работы за компьютером! Привет, друг! Если ты только начинаешь свое знакомство с миром Linux, наверняка тебя уже задели вопросы о том, какой шелл лучше: Bash или Zsh. Не переживай, сегодня мы с тобой разберемся в этом хитром деле простым и понятным языком. Разделим все на понятные пункты и сделаем этот путь интересным! Перед тем, как углубляться в дебри Bash и Zsh, давай разберемся, что такое шелл...
Следующая статья
Документы, вакансии и контакты