Пропустить до содержимого

Как использовать объединение (merge) в DataFrame в Python?

[

Объединение данных в pandas с помощью merge(), join() и concat()

Автор: Кайл Стратис data-science intermediate

Таблица содержания

  • pandas merge(): объединение данных по общим столбцам или индексам
    • Как использовать merge()
    • Примеры
  • pandas .join(): объединение данных по столбцу или индексу
    • Как использовать .join()
    • Примеры
  • pandas concat(): объединение данных по строкам или столбцам
    • Как использовать concat()
    • Примеры
  • Заключение

Практические руководства по Python, которые предлагают подробные пояснения, шаг за шагом выполнения примеров кода и объяснений:

Дополнительно

Объединение данных в pandas с помощью merge(), join() и concat()

Series и DataFrame в pandas - мощные инструменты для изучения и анализа данных. Они предлагают множество возможностей для объединения отдельных наборов данных. С помощью pandas можно объединять, соединять и объединять наборы данных, что позволяет объединять и лучше понимать данные при анализе.

В этом руководстве вы узнаете, как и когда можно объединять данные в pandas с помощью следующих методов:

  • merge() - объединение данных по общим столбцам или индексам
  • .join() - объединение данных по ключевому столбцу или индексу
  • concat() - объединение DataFrame по строкам или столбцам

Вы можете следовать примерам в этом руководстве, используя интерактивную записную книжку Jupyter и файлы данных, доступные по ссылке ниже:

Примечание: Все техники, которые вы узнаете ниже, в основном будут работать как для объектов DataFrame, так и для Series. Однако для упрощения и краткости примеры будут использовать термин набор данных, чтобы назвать объекты, которые могут быть как DataFrame, так и Series.

pandas merge(): объединение данных по общим столбцам или индексам

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

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

Вы можете использовать one-to-many и many-to-many объединения с помощью merge(). В одном-ко-многим объединении один из ваших наборов данных будет иметь множество строк в объединяемом столбце, которые повторяются одними и теми же значениями. Например, значения могут быть: 1, 1, 3, 5 и 5. В то же время столбец объединения в другом наборе данных не будет иметь повторяющихся значений. Например, это могут быть значения 1, 3 и 5.

Как вы могли уже догадаться, при многие-ко-многим объединении оба ваших столбца объединения будут иметь повторяющиеся значения. Такие объединения более сложны и приводят к декартовому произведению объединенных строк.

Это означает, что после объединения у вас будет каждая комбинация строк, которые имеют одно и то же значение в ключевом столбце.

Давайте рассмотрим эти методы подробнее и приведем примеры их использования.

Как использовать merge()

Метод merge() имеет следующий синтаксис:

df_merged = pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)

Параметры метода merge():

  • left и right - объединяемые объекты данных (объекты DataFrame или Series)
  • how - тип объединения (inner, outer, left или right)
  • on - столбцы или индексы, по которым следует выполнить объединение
  • left_on - столбцы или индексы объединяемого объекта данных слева
  • right_on - столбцы или индексы объединяемого объекта данных справа
  • left_index и right_index - указание использовать ли индекс объединяемого объекта данных слева и справа
  • sort - сортировать ли объединенные данные

Параметр how определяет тип объединения:

  • 'inner' - только общие строки или индексы из объединяемых объектов данных
  • 'outer' - все строки или индексы из каждого объединяемого объекта данных
  • 'left' - все строки или индексы из объединяемого объекта данных слева и только общие строки или индексы со стороны справа
  • 'right' - все строки или индексы из объединяемого объекта данных справа и только общие строки или индексы со стороны слева

Примеры

Объединение на основе общего столбца

Допустим, у вас есть два объекта данных - df1 и df2, и вы хотите объединить их на основе общего столбца “key”. Вы можете использовать метод merge() с параметром on, указывающим столбец для объединения:

import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
'value2': [5, 6, 7, 8]})
df_merged = pd.merge(df1, df2, on='key')

В результате кода df_merged будет содержать объединенные данные:

key value1 value2
0 B 2 5
1 D 4 6

Объединение на основе общих индексов

Вы также можете объединить объекты данных на основе общих индексов с помощью merge(). Для этого вы можете использовать параметры left_index и right_index, установив их в True:

import pandas as pd
df1 = pd.DataFrame({'value1': [1, 2, 3, 4]},
index=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame({'value2': [5, 6, 7, 8]},
index=['B', 'D', 'E', 'F'])
df_merged = pd.merge(df1, df2, left_index=True, right_index=True)

В результате df_merged будет содержать объединенные данные:

value1 value2
B 2 5
D 4 6

Объединение с разными типами объединения (how)

Параметр how позволяет задавать разные типы объединения. Например, вы можете использовать параметр how='outer', чтобы объединить объекты данных с помощью полного внешнего объединения, которое включает все строки или индексы из каждого объекта данных:

import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
'value2': [5, 6, 7, 8]})
df_merged = pd.merge(df1, df2, on='key', how='outer')

В результате df_merged будет содержать следующие объединенные данные:

key value1 value2
0 A 1.0 NaN
1 B 2.0 5.0
2 C 3.0 NaN
3 D 4.0 6.0
4 E NaN 7.0
5 F NaN 8.0

В приведенных выше примерах показаны основы объединения данных в pandas с помощью метода merge(). Вы можете дополнительно изучить документацию по pandas, чтобы узнать больше о функциях объединения, таких как suffixes, validate и других.

pandas .join(): объединение данных по столбцу или индексу

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

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

Как использовать .join()

Метод .join() имеет следующий синтаксис:

df_merged = left.join(right, on=None, how='left', lsuffix='', rsuffix='')

Параметры метода .join():

  • right - объект данных для объединения
  • on - столбец или индекс, по которому следует выполнить объединение
  • how - тип объединения (left, right, inner, outer)
  • lsuffix и rsuffix - суффиксы, добавляемые к повторяющимся именам столбцов при объединении

Примеры

Объединение на основе ключевого столбца

Допустим, у вас есть два объекта данных - df1 и df2, и вы хотите объединить их по ключевому столбцу “key”. Вы можете использовать метод .join() с параметром on, указывающим столбец для объединения:

import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'value2': [5, 6, 7, 8]},
index=['B', 'D', 'E', 'F'])
df_merged = df1.join(df2, on='key')

В результате кода df_merged будет содержать объединенные данные:

key value1 value2
0 A 1 NaN
1 B 2 5.0
2 C 3 NaN
3 D 4 6.0

Объединение на основе индекса

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

import pandas as pd
df1 = pd.DataFrame({'value1': [1, 2, 3, 4]},
index=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame({'value2': [5, 6, 7, 8]},
index=['B', 'D', 'E', 'F'])
df_merged = df1.join(df2)

В результате df_merged будет содержать объединенные данные:

value1 value2
A 1 NaN
B 2 5.0
C 3 NaN
D 4 6.0

Объединение с различными типами объединения (how)

Метод .join() также поддерживает разные типы объединения. Параметр how позволяет задавать тип объединения.

import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'value2': [5, 6, 7, 8]},
index=['B', 'D', 'E', 'F'])
df_merged = df1.join(df2, how='outer')

В результате df_merged будет содержать следующие объединенные данные:

key value1 value2
0 A 1.0 NaN
1 B 2.0 5.0
2 C 3.0 NaN
3 D 4.0 6.0
4 NaN NaN 7.0
5 NaN NaN 8.0

pandas concat(): объединение данных по строкам или столбцам

Третий метод, который вы узнаете, - это concat(). Вы можете использовать concat() для объединения объектов данных по строкам или столбцам.

Как использовать concat()

Метод concat() имеет следующий синтаксис:

df_concatenated = pd.concat(objs, axis=0, join='outer')

Параметры метода concat():

  • objs - объекты данных для объединения
  • axis - ось, по которой нужно объединить данные (0 - строки, 1 - столбцы)
  • join - тип объединения (inner, outer)

Примеры

Объединение по строкам

Допустим, у вас есть два объекта данных - df1 и df2, и вы хотите объединить их по строкам. Вы можете использовать метод concat() с параметром axis=0:

import pandas as pd
df1 = pd.DataFrame({'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'value2': [5, 6, 7, 8]})
df_concatenated = pd.concat([df1, df2], axis=0)

В результате кода df_concatenated содержит объединенные данные по строкам:

value1 value2
0 1.0 NaN
1 2.0 NaN
2 3.0 NaN
3 4.0 NaN
0 NaN 5.0
1 NaN 6.0
2 NaN 7.0
3 NaN 8.0

Объединение по столбцам

Вы также можете объединить объекты данных по столбцам с помощью метода concat() с параметром axis=1:

import pandas as pd
df1 = pd.DataFrame({'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'value2': [5, 6, 7, 8]})
df_concatenated = pd.concat([df1, df2], axis=1)

В результате кода df_concatenated содержит объединенные данные по столбцам:

value1 value2
0 1 5
1 2 6
2 3 7
3 4 8

Другие параметры объединения

Метод concat() также поддерживает другие параметры, такие как ignore_index, keys и другие. Ознакомьтесь со документацией по методу concat(), чтобы узнать больше о возможностях объединения данных с помощью этого метода.

Заключение

В этом руководстве вы изучили три метода объединения данных в pandas - merge(), .join() и concat(). Вы узнали, как использовать каждый из них и привели примеры их использования.

Объединение данных позволяет вам соединять, объединять и объединять наборы данных для лучшего понимания и анализа данных в pandas. Используйте эти методы согласно вашим потребностям и задачам для эффективной работы с данными в Python и pandas.