Объединение таблиц методом join python

Объединение таблиц в Pandas: merge, join и concatenate

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

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

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

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

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

df1 = pd.DataFrame() df2 = pd.DataFrame() 

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() df1 = pd.DataFrame() 

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() df1 = pd.DataFrame() 

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

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

df2 = pd.DataFrame() df1 = pd.DataFrame() 

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

Источник

Функция join() в Pandas: объединение DataFrame

Функция Pandas join() действует как важный атрибут, когда один DataFrame является таблицей поиска. Например, он содержит большую часть данных, а дополнительные данные этого DataFrame присутствуют в каком-то другом DataFrame.

Что такое функция join() в Pandas?

join() — это библиотечная функция Pandas, используемая для объединения разных фреймов данных в Python. Например, функция join() объединяет столбцы с другим DataFrame либо в индексе, либо в ключевом столбце. Функцию join() можно определить как объединение стандартных полей разных фреймов данных. Столбцы, которые содержат общие значения и используются для объединения, называются ключами соединения.

Чтобы присоединиться к различным фреймам данных в Pandas на основе индекса или ключа столбца, используйте метод join().

Чтобы определить ключ соединения, нам нужно найти обязательные поля данных, общие для двух фреймов данных, и столбцы в этом фрейме данных, которые совпадают.

Эффективно объединяйте несколько объектов DataFrame по индексу одновременно, передавая список. Мы можем либо соединить DataFrames вертикально, либо бок о бок. Под вертикальным мы подразумеваем объединение фреймов данных по столбцам, а рядом — индексацию.

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

Источник

pandas.DataFrame.join#

Join columns with other DataFrame either on index or on a key column. Efficiently join multiple DataFrame objects by index at once by passing a list.

Parameters other DataFrame, Series, or a list containing any combination of them

Index should be similar to one of the columns in this one. If a Series is passed, its name attribute must be set, and that will be used as the column name in the resulting joined DataFrame.

on str, list of str, or array-like, optional

Column or index level name(s) in the caller to join on the index in other , otherwise joins index-on-index. If multiple values given, the other DataFrame must have a MultiIndex. Can pass an array as the join key if it is not already contained in the calling DataFrame. Like an Excel VLOOKUP operation.

How to handle the operation of the two objects.

  • left: use calling frame’s index (or column if on is specified)
  • right: use other ’s index.
  • outer: form union of calling frame’s index (or column if on is specified) with other ’s index, and sort it. lexicographically.
  • inner: form intersection of calling frame’s index (or column if on is specified) with other ’s index, preserving the order of the calling’s one.
  • cross: creates the cartesian product from both frames, preserves the order of the left keys.

Suffix to use from left frame’s overlapping columns.

rsuffix str, default ‘’

Suffix to use from right frame’s overlapping columns.

sort bool, default False

Order result DataFrame lexicographically by the join key. If False, the order of the join key depends on the join type (how keyword).

validate str, optional

If specified, checks if join is of specified type. * “one_to_one” or “1:1”: check if join keys are unique in both left and right datasets. * “one_to_many” or “1:m”: check if join keys are unique in left dataset. * “many_to_one” or “m:1”: check if join keys are unique in right dataset. * “many_to_many” or “m:m”: allowed, but does not result in checks. .. versionadded:: 1.5.0

A dataframe containing columns from both the caller and other .

For column(s)-on-column(s) operations.

Parameters on , lsuffix , and rsuffix are not supported when passing a list of DataFrame objects.

Support for specifying index levels as the on parameter was added in version 0.23.0.

>>> df = pd.DataFrame('key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'], . 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']>) 
>>> df key A 0 K0 A0 1 K1 A1 2 K2 A2 3 K3 A3 4 K4 A4 5 K5 A5 
>>> other = pd.DataFrame('key': ['K0', 'K1', 'K2'], . 'B': ['B0', 'B1', 'B2']>) 
>>> other key B 0 K0 B0 1 K1 B1 2 K2 B2 

Join DataFrames using their indexes.

>>> df.join(other, lsuffix='_caller', rsuffix='_other') key_caller A key_other B 0 K0 A0 K0 B0 1 K1 A1 K1 B1 2 K2 A2 K2 B2 3 K3 A3 NaN NaN 4 K4 A4 NaN NaN 5 K5 A5 NaN NaN 

If we want to join using the key columns, we need to set key to be the index in both df and other . The joined DataFrame will have key as its index.

>>> df.set_index('key').join(other.set_index('key')) A B key K0 A0 B0 K1 A1 B1 K2 A2 B2 K3 A3 NaN K4 A4 NaN K5 A5 NaN 

Another option to join using the key columns is to use the on parameter. DataFrame.join always uses other ’s index but we can use any column in df . This method preserves the original DataFrame’s index in the result.

>>> df.join(other.set_index('key'), on='key') key A B 0 K0 A0 B0 1 K1 A1 B1 2 K2 A2 B2 3 K3 A3 NaN 4 K4 A4 NaN 5 K5 A5 NaN 

Using non-unique key values shows how they are matched.

>>> df = pd.DataFrame('key': ['K0', 'K1', 'K1', 'K3', 'K0', 'K1'], . 'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']>) 
>>> df key A 0 K0 A0 1 K1 A1 2 K1 A2 3 K3 A3 4 K0 A4 5 K1 A5 
>>> df.join(other.set_index('key'), on='key', validate='m:1') key A B 0 K0 A0 B0 1 K1 A1 B1 2 K1 A2 B1 3 K3 A3 NaN 4 K0 A4 B0 5 K1 A5 B1 

Источник

Читайте также:  Java sax parser примеры
Оцените статью