Конкатенация и объединение таблиц в Pandas

Объединение таблиц вертикально и горизонтально в Pandas

Анализ данных часто включает в себя работу с несколькими таблицами, которые нужно объединить или конкатенировать для получения более полной информации. В библиотеке Pandas для этой задачи существует метод concat(). Рассмотрим, как использовать concat() для объединения и конкатенации таблиц, а также рассмотрим его основные параметры.

Основы метода concat()

Метод concat() в библиотеке Pandas позволяет объединять два или более объекта DataFrame или Series вдоль определенной оси (обычно вдоль строк или столбцов). Это полезное средство для объединения данных из разных источников или для конкатенации данных с одинаковой структурой.

Основным параметром метода concat() является список объектов, которые вы хотите объединить. Давайте рассмотрим несколько примеров.

Пример 1: Конкатенация по строкам
Предположим, у нас есть два объекта DataFrame — df1 и df2, и мы хотим конкатенировать их по строкам:

import pandas as pd

data1 = {'A': [1, 2], 'B': [3, 4]}
data2 = {'A': [5, 6], 'B': [7, 8]}

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

result = pd.concat([df1, df2])
print(result)

#    A  B
# 0  1  3
# 1  2  4
# 0  5  7
# 1  6  8

Результат будет объединенным DataFrame, содержащим данные из df1 и df2. Строки из df2 просто добавляются в конец df1.

Пример 2: Конкатенация по столбцам
Вы также можете конкатенировать объекты DataFrame по столбцам, установив параметр axis=1:

result = pd.concat([df1, df2], axis=1)
print(result)

#    A  B  A  B
# 0  1  3  5  7
# 1  2  4  6  8

Результат будет DataFrame, где столбцы из df2 добавляются справа от столбцов из df1.

Основные параметры метода concat()

Помимо основного параметра списка объектов, метод concat() предлагает ряд дополнительных параметров для более гибкой работы с данными. Давайте рассмотрим некоторые из них.

Параметр keys

Параметр keys позволяет добавить мультииндексы (иерархические индексы) к конкатенированным данным. Это полезно, если вы хотите различать источники данных или создать более информативные индексы. Например:

import pandas as pd

data1 = {'A': [1, 2], 'B': [3, 4]}
data2 = {'A': [5, 6], 'B': [7, 8]}

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

# Конкатенация с параметром keys
result_with_keys = pd.concat([df1, df2], keys=['Source1', 'Source2'])
print("Concatenation with Keys:\n", result_with_keys)

Результат будет содержать мультииндекс, который указывает на источник данных:

Concatenation with Keys:
            A  B
Source1 0  1  3
        1  2  4
Source2 0  5  7
        1  6  8

Теперь у нас есть мультииндекс, который позволяет легко идентифицировать, из какого источника данных каждая строка.

Параметр ignore_index

Параметр ignore_index управляет индексацией результата конкатенации. Если он установлен в True, индексы будут пересчитаны, начиная с нуля. Это полезно, если вы не хотите сохранять исходные индексы из исходных данных. Например:

# Конкатенация с параметром ignore_index=True
result_ignore_index = pd.concat([df1, df2], ignore_index=True)
print("Concatenation with Ignore Index:\n", result_ignore_index)

Результат будет содержать пересчитанные индексы:

Concatenation with Ignore Index:
    A  B
0  1  3
1  2  4
2  5  7
3  6  8

Индексы пересчитаны, начиная с нуля, что может быть полезно, если вам не важны исходные индексы из исходных данных.

Параметр join

Параметр join определяет, как обрабатывать столбцы, которых нет в одной из таблиц. По умолчанию он равен outer, что означает, что все столбцы будут включены, и пропущенные значения будут заполнены NaN. Вы также можете установить его в inner, чтобы включить только общие столбцы, или в left или right, чтобы включить столбцы только из левой или правой таблицы соответственно.

Давайте рассмотрим пример:

import pandas as pd

data1 = {'A': [1, 2], 'B': [3, 4], 'C': [5, 6]}
data2 = {'B': [7, 8], 'C': [9, 10], 'D': [11, 12]}

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

# Слияние с параметром join='outer'
result_outer = pd.concat([df1, df2], join='outer')
print("Outer Join Result:\n", result_outer)

# Слияние с параметром join='inner'
result_inner = pd.concat([df1, df2], join='inner')
print("\nInner Join Result:\n", result_inner)

Результат для параметра join='outer' включает все столбцы из обеих таблиц, а пропущенные значения заполняются NaN:

Outer Join Result:
      A  B   C     D
0  1.0  3   5   NaN
1  2.0  4   6   NaN
0  NaN  7   9  11.0
1  NaN  8  10  12.0

А результат для параметра join='inner' включает только общие столбцы, то есть только столбцы B и C:

Inner Join Result:
    B   C
0  3   5
1  4   6
0  7   9
1  8  10

Параметр sort

Параметр sort определяет, следует ли сортировать столбцы в результирующем DataFrame. По умолчанию он установлен в False. Если у вас есть большое количество столбцов, сортировка может быть дорогостоящей операцией, поэтому включайте ее внимательно.

# Конкатенация с параметром sort=True
result_sorted = pd.concat([df1, df2], sort=True)
print("Sorted Concatenation Result:\n", result_sorted)

Результат с параметром sort=True будет отсортирован по алфавиту по именам столбцов:

Sorted Concatenation Result:
      A  B   C     D
0  1.0  3   5   NaN
1  2.0  4   6   NaN
0  NaN  7   9  11.0
1  NaN  8  10  12.0

Обработка дублирующихся столбцов

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

data1 = {'A': [1, 2], 'B': [3, 4]}
data2 = {'A': [5, 6], 'B': [7, 8]}

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

# Конкатенация с параметром keys
result_with_keys = pd.concat([df1, df2], keys=['Source1', 'Source2'])
print("Concatenation with Keys:\n", result_with_keys)

# Переименование столбцов перед конкатенацией
df1.columns = ['A', 'B']
df2.columns = ['A', 'B']
result_renamed = pd.concat([df1, df2])
print("\nConcatenation with Renamed Columns:\n", result_renamed)

Результат с параметром keys создает мультииндекс иерархической индексации:

Concatenation with Keys:
            A  B
Source1 0  1  3
        1  2  4
Source2 0  5  7
        1  6  8

А результат с переименованными столбцами просто конкатенирует данные без конфликтов:

Concatenation with Renamed Columns:
   A  B
0  1  3
1  2  4
0  5  7
1  6  8

Заключение

Метод concat() в библиотеке Pandas - мощное средство для объединения и конкатенации данных из разных источников. Понимание основных параметров и приемов работы с ним поможет вам эффективно управлять данными в ваших проектах и анализе данных.

Содержание: