pandas.merge
- pandas.merge(left, 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)[source]
-
Объединение DataFrame или именованных Series-объектов с помощью соединения в стиле базы данных.
Именованный объект Series обрабатывается как DataFrame с единственным именованным столбцом.
Объединение выполняется по столбцам или индексам. Если объединение выполняется по столбцам, индексы DataFrame будут проигнорированы. В противном случае, если объединение выполняется по индексам или индексам и столбцу/столбцам, индекс будет передан. При выполнении кросс-объединения не разрешается указывать столбцы для объединения.
Предупреждение
Если оба столбца ключей содержат строки с нулевым значением ключа, эти строки будут сопоставляться друг с другом. Это отличается от обычного поведения объединения SQL и может привести к неожиданным результатам.
- Параметры
-
- left:DataFrame
- right:DataFrame или именованный Series
-
Объект для объединения.
- how:{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’}, по умолчанию ‘inner’
-
Тип объединения, который будет выполнен.
left: использовать только ключи из левой таблицы, аналогично левому внешнему объединению SQL; сохранить порядок ключей.
right: использовать только ключи из правой таблицы, аналогично правому внешнему объединению SQL; сохранить порядок ключей.
outer: использовать объединение ключей из обеих таблиц, аналогично полному внешнему объединению SQL; отсортировать ключи лексикографически.
inner: использовать пересечение ключей из обеих таблиц, аналогично внутреннему объединению SQL; сохранить порядок левых ключей.
-
cross: создает декартово произведение из обеих таблиц, сохраняет порядок левых ключей.
Добавлено в версии 1.2.0.
- on:имя или список
-
Имена столбца или уровня индекса для объединения. Они должны быть найдены в обеих DataFrame. Если on равно None и объединение не выполняется по индексам, оно по умолчанию равно пересечению столбцов в обеих DataFrame.
- left_on:имя или список или массив-подобный объект
-
Имена столбца или уровня индекса для объединения в левой DataFrame. Также может быть массивом или списком массивов длиной левой DataFrame. Эти массивы обрабатываются как столбцы.
- right_on:имя или список или массив-подобный объект
-
Имена столбца или уровня индекса для объединения в правой DataFrame. Также может быть массивом или списком массивов длиной правой DataFrame. Эти массивы обрабатываются как столбцы.
- left_index:bool, по умолчанию False
-
Использовать индекс из левой DataFrame в качестве ключа(ей) объединения. Если это многоуровневый индекс, количество ключей в другой DataFrame (либо индекс, либо количество столбцов) должно соответствовать количеству уровней.
- right_index:bool, по умолчанию False
-
Использовать индекс из правой DataFrame в качестве ключа объединения. Аналогичные замечания, как для left_index.
- sort:bool, по умолчанию False
-
Сортировать ключи объединения лексикографически в результирующем DataFrame. Если False, порядок ключей объединения зависит от типа объединения (параметр how).
- suffixes:последовательность из двух элементов, по умолчанию (“_x”, “_y”)
-
Последовательность длины 2, где каждый элемент — необязательно строка, указывающая суффикс, который добавляется к совпадающим именам столбцов в left и right соответственно. Передайте значение None вместо строки, чтобы указать, что имя столбца из left или right должно остаться без суффикса. По крайней мере одно из значений не должно быть None.
- copy:bool, по умолчанию True
-
Если False, избегать копирования, если это возможно.
- indicator:bool или строка, по умолчанию False
-
Если True, добавляет столбец в выходной DataFrame под названием “_merge” с информацией о источнике каждой строки. Столбцу можно присвоить другое имя, указав строковый аргумент. Столбец будет иметь категориальный тип со значением “left_only” для наблюдений, ключ объединения которых присутствует только в левой DataFrame, “right_only” для наблюдений, ключ объединения которых присутствует только в правой DataFrame, и “both”, если ключ объединения наблюдения присутствует в обеих DataFrame.
- validate:строка, необязательно
-
Если указано, проверяет, является ли объединение указанного типа.
“one_to_one” или “1:1”: проверить, уникальны ли ключи объединения в обоих наборах данных.
“one_to_many” или “1:m”: проверить, уникальны ли ключи объединения в левом наборе данных.
“many_to_one” или “m:1”: проверить, уникальны ли ключи объединения в правом наборе данных.
“many_to_many” или “m:m”: разрешено, но не приводит к проверкам.
- Возвращаемое значение
-
- DataFrame
-
DataFrame объединенных объектов.
См. также
merge_ordered-
Объединение с необязательным заполнением/интерполяцией.
merge_asof-
Объединение на ближайших ключах.
DataFrame.join-
Аналогичный метод, использующий индексы.
Примечания
Поддержка указания уровней индекса как параметров on, left_on и right_on была добавлена в версии 0.23.0. Поддержка объединения именованных объектов Series была добавлена в версии 0.24.0
Примеры
>>> df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'], ... 'value': [1, 2, 3, 5]}) >>> df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'], ... 'value': [5, 6, 7, 8]}) >>> df1 lkey value 0 foo 1 1 bar 2 2 baz 3 3 foo 5 >>> df2 rkey value 0 foo 5 1 bar 6 2 baz 7 3 foo 8Объединение df1 и df2 по столбцам lkey и rkey. Столбцы значений имеют суффиксы по умолчанию _x и _y.
>>> df1.merge(df2, left_on='lkey', right_on='rkey') lkey value_x rkey value_y 0 foo 1 foo 5 1 foo 1 foo 8 2 foo 5 foo 5 3 foo 5 foo 8 4 bar 2 bar 6 5 baz 3 baz 7
Объединение DataFrame df1 и df2 с указанными суффиксами слева и справа, добавленными к любым совпадающим столбцам.
>>> df1.merge(df2, left_on='lkey', right_on='rkey', ... suffixes=('_left', '_right')) lkey value_left rkey value_right 0 foo 1 foo 5 1 foo 1 foo 8 2 foo 5 foo 5 3 foo 5 foo 8 4 bar 2 bar 6 5 baz 3 baz 7Объединение DataFrame df1 и df2, но сгенерировать исключение, если DataFrames имеют какие-либо совпадающие столбцы.
>>> df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=(False, False)) Traceback (most recent call last): ... ValueError: columns overlap but no suffix specified: Index(['value'], dtype='object')>>> df1 = pd.DataFrame({'a': ['foo', 'bar'], 'b': [1, 2]}) >>> df2 = pd.DataFrame({'a': ['foo', 'baz'], 'c': [3, 4]}) >>> df1 a b 0 foo 1 1 bar 2 >>> df2 a c 0 foo 3 1 baz 4>>> df1.merge(df2, how='inner', on='a') a b c 0 foo 1 3>>> df1.merge(df2, how='left', on='a') a b c 0 foo 1 3.0 1 bar 2 NaN>>> df1 = pd.DataFrame({'left': ['foo', 'bar']}) >>> df2 = pd.DataFrame({'right': [7, 8]}) >>> df1 left 0 foo 1 bar >>> df2 right 0 7 1 8>>> df1.merge(df2, how='cross') left right 0 foo 7 1 foo 8 2 bar 7 3 bar 8
© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/1.5.0/reference/api/pandas.merge.html