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=None, indicator=False, validate=None)[source]
-
Объединение DataFrame или именованных Series-объектов с помощью объединения в стиле базы данных.
Именованный объект Series обрабатывается как DataFrame с одним именованным столбцом.
Объединение выполняется по столбцам или индексам. Если объединяются столбцы по столбцам, индексы DataFrame будут проигнорированы. В противном случае, если объединяются индексы по индексам или индексы по столбцу или столбцам, индекс будет передан. При выполнении перекрёстного объединения не допускаются какие-либо указания столбцов для объединения.
Предупреждение
Если оба столбца ключей содержат строки, где ключ имеет значение NULL, эти строки будут сопоставлены друг с другом. Это отличается от обычного поведения объединения SQL и может привести к непредвиденным результатам.
- Параметры:
-
- left:DataFrame или именованный Series
- right:DataFrame или именованный Series
-
Объект для объединения.
- how:{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’}, по умолчанию ‘inner’
-
Тип объединения, который нужно выполнить.
left: использовать только ключи из левой таблицы, аналогично левому внешнему объединению SQL; сохранить порядок ключей.
right: использовать только ключи из правой таблицы, аналогично правому внешнему объединению SQL; сохранить порядок ключей.
outer: использовать объединение ключей из обеих таблиц, аналогично полному внешнему объединению SQL; отсортировать ключи лексикографически.
inner: использовать пересечение ключей из обеих таблиц, аналогично внутреннему объединению SQL; сохранить порядок ключей левой таблицы.
cross: создаёт декартово произведение из обеих таблиц, сохраняет порядок ключей левой таблицы.
- on:имя или список
-
Имена столбцов или уровней индексов для объединения. Эти имена должны быть найдены в обоих DataFrame. Если on равно None и объединение не выполняется по индексам, то по умолчанию используется пересечение столбцов в обоих DataFrame.
- left_on:имя или список, или массив-подобный объект
-
Имена столбцов или уровней индексов для объединения в левом DataFrame. Также может быть массивом или списком массивов длиной левого DataFrame. Эти массивы обрабатываются как столбцы.
- right_on:имя или список, или массив-подобный объект
-
Имена столбцов или уровней индексов для объединения в правом DataFrame. Также может быть массивом или списком массивов длиной правого DataFrame. Эти массивы обрабатываются как столбцы.
- left_index:bool, по умолчанию False
-
Использовать индекс из левого DataFrame в качестве ключа(ей) объединения. Если это MultiIndex, количество ключей в другой таблице (либо индекс, либо количество столбцов) должно соответствовать количеству уровней.
- 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, избежать копирования, если это возможно.
Примечание
Ключевое слово copy изменит поведение в pandas 3.0. Copy-on-Write будет включён по умолчанию, что означает, что все методы с ключевым словом copy будут использовать механизм ленивого копирования, чтобы отложить копирование и проигнорировать ключевое слово copy. Ключевое слово copy будет удалено в будущей версии pandas.
Вы уже можете получить поведение и улучшения будущей версии, включив copy on write
pd.options.mode.copy_on_write = True - indicator:bool или str, по умолчанию False
-
Если True, добавляет столбец в результирующий DataFrame под названием “_merge” с информацией о источнике каждой строки. Столбцу можно присвоить другое имя, передав строковый аргумент. Столбец будет иметь тип Categorical со значением “left_only” для наблюдений, чьей ключ объединения встречается только в левом DataFrame, “right_only” для наблюдений, чьей ключ объединения встречается только в правом DataFrame и “both”, если ключ объединения наблюдения найден в обоих DataFrame.
- validate:str, необязательно
-
Если указано, проверяет, является ли объединение указанного типа.
“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-
Аналогичный метод, использующий индексы.
Примеры
>>> 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 bar 2 bar 6 3 baz 3 baz 7 4 foo 5 foo 5 5 foo 5 foo 8
Объединение DataFrames 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 bar 2 bar 6 3 baz 3 baz 7 4 foo 5 foo 5 5 foo 5 foo 8Объединение DataFrames 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/2.2.2/reference/api/pandas.merge.html