pandas_python

Гайд по объединению данных в библиотеке Pandas: Concat, Merge и Join

28 мая 2023 г.

Объединение данных является важной операцией при работе с табличными данными. В этой статье мы рассмотрим каждый из этих методов и их применение.

Типы объединений:

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

Внешнее объединение (outer join): Внешнее объединение объединяет все строки из обоих таблиц, сохраняя значения, где это возможно.

Левое объединение (left join): Левое объединение сохраняет все строки из левой (первой) таблицы и добавляет соответствующие значения из правой (второй).

Правое объединение (right join): Правое объединение сохраняет все строки из правой (второй) таблицы и добавляет соответствующие значения из левой (первой).

Метод concat():

Метод concat() используется для объединения объектов DataFrame или Series вдоль заданной оси. Он предоставляет гибкость при работе с данными и позволяет объединять данные по вертикали (по строкам) или горизонтали (по столбцам). Рассмотрим синтаксис метода concat():

result = pd.concat(objs, axis=0, join='outer', ignore_index=False)

  • objs: Список или кортеж из объектов DataFrame или Series, которые нужно объединить.
  • axis: Ось, по которой будет происходить объединение. По умолчанию, axis=0 (вертикальное объединение).
  • join: Тип объединения. По умолчанию, join='outer', что означает внешнее объединение.
  • ignore_index: Флаг, указывающий на необходимость переиндексации объединенных данных. По умолчанию, ignore_index=False.

Пример объединения данных с помощью метода concat():

import pandas as pd

# Создание двух объектов DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]})


# Объединение по вертикали
result_vertical = pd.concat([df1, df2])


# Объединение по горизонтали
result_horizontal = pd.concat([df1, df2], axis=1)

Метод merge():

Метод merge() позволяет объединять данные на основе значений одного или нескольких столбцов. Он предоставляет гибкость в выборе типа объединения (внутреннее, внешнее, левое или правое) и столбцов, по которым будет происходить объединение. Рассмотрим синтаксис метода merge():

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

  • left и right: Объекты DataFrame, которые нужно объединить.
  • how: Тип объединения. По умолчанию, how='inner' (внутреннее объединение).
  • on: Имя или имена столбцов, по которым будет происходить объединение. Если не заданы, то объединение будет выполнено по общим столбцам.
  • left_on и right_on: Имена столбцов в left и right соответственно, по которым будет происходить объединение.
  • left_index и right_index: Флаги, указывающие на использование индекса left и/или right для объединения. По умолчанию, left_index=False и right_index=False.

Пример объединения данных с помощью метода merge():

import pandas as pd

# Создание двух объектов DataFrame
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['John', 'Alice', 'Bob']})
df2 = pd.DataFrame({'ID': [2, 3, 4], 'Age': [25, 30, 35]})


# Внутреннее объединение по столбцу 'ID'
result_inner = pd.merge(df1, df2, on='ID', how='inner')


# Внешнее объединение по столбцу 'ID'
result_outer = pd.merge(df1, df2, on='ID', how='outer')


# Левое объединение по столбцу 'ID'
result_left = pd.merge(df1, df2, on='ID', how='left')


# Правое объединение по столбцу 'ID'
result_right = pd.merge(df1, df2, on='ID', how='right')

Метод join():

Метод join() позволяет объединять данные на основе индексов объектов DataFrame. Он предоставляет удобный способ объединения данных, если индексы объектов DataFrame содержат схожую информацию. Рассмотрим синтаксис метода join():

result = left.join(right, how='left', lsuffix='', rsuffix='', sort=False)

  • left и right: Объекты DataFrame, которые нужно объединить.
  • how: Тип объединения. По умолчанию, how='left' (левое объединение).
  • lsuffix и rsuffix: Суффиксы для различения одинаковых имен столбцов в left и right соответственно.
  • sort: Флаг, указывающий на необходимость сортировки результата по индексу. По умолчанию, sort=False.

Пример объединения данных с помощью метода join():

import pandas as pd

# Создание двух объектов DataFrame
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['x', 'y', 'z'])
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]}, index=['y', 'z', 'w'])


# Левое объединение по индексу
result_left = df1.join(df2, how='left')


# Правое объединение по индексу
result_right = df1.join(df2, how='right')

Заключение:

В этом подробном гайде мы рассмотрели три основных метода объединения данных в библиотеке Pandas: concat, merge и join. Каждый из этих методов предоставляет удобные и гибкие возможности для объединения данных, в зависимости от требований анализа данных. Вы можете выбрать наиболее подходящий метод в зависимости от структуры данных и типа объединения, которое вам необходимо выполнить.


Вернуться