Функция Pandas concat()

Pandas 通用函数Pandas: общие функции


pd.concat()используется в библиотеке Pandas дляобъединения (соединения) нескольких объектов Series или DataFrameфункция. Она может объединять несколько объектов в новый объект вдоль строк или столбцов.

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

Определение слова: concatявляется сокращением от "concatenate" (соединять, связывать в цепочку), означающим соединение нескольких вещей встык.


Базовый синтаксис и параметры

pd.concat()является функцией верхнего уровня библиотеки Pandas, используемой для объединения нескольких объектов Series или DataFrame вдоль указанной оси.

Формат синтаксиса

pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False)

Описание параметра

  • Параметр: objs
    • Тип: Series, DataFrame или список из них.
    • Описание: Один или несколько объектов Series/DataFrame для конкатенации. Они могут быть одним объектом, списком или словарём.
  • Параметр: axis
    • Тип: целое число (0 или 1).
    • Описание: Определяет ось конкатенации.0означает конкатенацию по строкам (вертикальное присоединение),1означает конкатенацию по столбцам (горизонтальное объединение). По умолчанию —0。
  • Параметр: join
    • Тип: строка ('outer' или 'inner').
    • Описание: Как обрабатывать, когда индексы вдоль оси конкатенации не согласованы.'outer'означает взятие объединения (с сохранением всех индексов),'inner'означает взятие пересечения (с сохранением только общих индексов). По умолчанию —'outer'。
  • Параметр: ignore_index
    • Тип: Boolean.
    • Описание: Если этоTrue, исходный индекс не используется после конкатенации, вместо него создаётся новый целочисленный индекс. По умолчанию —False。
  • Параметр: keys
    • Тип: последовательность.
    • Описание: Используется для создания многоуровневого индекса после конкатенации, определяющего источник каждого исходного объекта. По умолчаниюNone。

Описание функций

  • Возвращаемое значение: Возвращает объединённый объект Series или DataFrame. Тип соответствует типам входных объектов.
  • Действие: Объединяет несколько объектов в один объект по указанной оси.

Примеры

Через серию примеров от простых к сложным давайте тщательно освоимpd.concat()использование.

Пример 1: Базовое использование — вертикальное объединение Series

Пример

import pandas as pd

# 1. Создание двух Series
s1 = pd.Series(['Alice', 'Bob', 'Charlie'], name='name')
s2 = pd.Series(['Diana', 'Eve', 'Frank'], name='name')

print(=== Исходный Series ===)
print("s1:", s1.tolist())
print("s2:", s2.tolist())

# 2. Использование pd.concat() для вертикального объединения (по умолчанию axis=0)
result = pd.concat([s1, s2])
print("\n=== Результат вертикального объединения pd.concat([s1, s2]) ===)
print(result)

# 3. Игнорировать исходный индекс и создать новый целочисленный индекс
result_ignore = pd.concat([s1, s2], ignore_index=True)
print("\n=== Результат ignore_index=True ===)
print(result_ignore)

Ожидаемый вывод:

=== 原始 Series ===
s1: ['Alice', 'Bob', 'Charlie']
s2: ['Diana', 'Eve', 'Frank']

=== pd.concat([s1, s2]) 纵向拼接结果 ===
0      Alice
1        Bob
2    Charlie
0     Diana
1        Eve
2     Frank
dtype: object

=== ignore_index=True 结果 ===
0      Alice
1        Bob
2    Charlie
3      Diana
4        Eve
5      Frank
dtype: object

Анализ кода:

  1. pd.concat([s1, s2])Объедините два Series вертикально в более длинный Series.
  2. По умолчанию исходный индекс сохраняется, поэтому будут дублирующиеся значения индекса 0, 1, 2.
  3. Настройкаignore_index=Trueможет заново сгенерировать непрерывный числовой индекс.

Пример 2: Горизонтальное объединение DataFrame

Использованиеaxis=1можно объединять несколько DataFrame по столбцам, что очень полезно при слиянии разных полей.

Пример

import pandas as pd

# 1. Создать два DataFrame
df1 = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35]
})

df2 = pd.DataFrame({
    'city': ['Пекин', 'Шанхай', 'Гуанчжоу'],
    'score': [85, 90, 95]
})

print(=== Исходный DataFrame ===)
print("df1:")
print(df1)
print("\ndf2:")
print(df2)

# 2. Горизонтальная конкатенация (axis=1)
result = pd.concat([df1, df2], axis=1)
print("\n=== Горизонтальная конкатенация с pd.concat([df1, df2], axis=1) ===)
print(result)

Ожидаемый вывод:

=== 原始 DataFrame ===
df1:
      name  age
0   Alice   25
1     Bob   30
2 Charlie   35

df2:
        city  score
0   Beijing     85
1  Shanghai     90
2  Guangzhou     95

=== pd.concat([df1, df2], axis=1) 横向拼接 ===
      name  age      city  score
0   Alice   25   Beijing     85
1     Bob   30  Shanghai     90
2 Charlie   35  Guangzhou     95

Анализ кода:

  • Использованиеaxis=1Конкатенируйте два DataFrame по столбцам.
  • Горизонтальная конкатенация требует, чтобы два DataFrame имели одинаковое количество строк (выравнивание по индексу).
  • Объединённый DataFrame содержит все столбцы обоих объектов.

Пример 3: Использование параметра keys для создания иерархического индекса

keysПараметр может помочь нам идентифицировать источник данных, что очень полезно при объединении содержимого из разных наборов данных.

Пример

import pandas as pd

# 1. Создайте словарь, содержащий несколько Series
data = {
    'group_a': pd.Series([1, 2, 3, 4]),
    'group_b': pd.Series([5, 6, 7, 8]),
    'group_c': pd.Series([9, 10, 11, 12])
}

print(=== Конкатенация с использованием параметра keys ===)
# 2. Используйте параметр keys для создания иерархического индекса
result = pd.concat(data, keys=['Group 1', 'Group 2', 'Group 3'])
print(result)

# 3. Доступ к данным на определенном уровне
print("\n=== Доступ к данным 'Group 1' ===)
print(result['Group 1'])

Ожидаемый вывод:

=== 使用 keys 参数拼接 ===
第一组  group_a    1
        group_b    2
        group_c    3
        group_a    4
第二组  group_a    5
        group_b    6
        group_c    7
        group_a    8
第二组  group_b    9
...

Анализ кода:

  • keysПараметр создает многоуровневый индекс (иерархический индекс) для результата конкатенации, при этом первый уровень определяет исходную группу данных.
  • Вы можете использоватьresult['第一组']для доступа к данным конкретной группы.

Пример 4: Обработка DataFrames с разными столбцами (параметр join)

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

Пример

import pandas as pd

# 1. Создание DataFrame с разными столбцами
df1 = pd.DataFrame({
    'name': ['Alice', 'Bob'],
    'age': [25, 30]
})

df2 = pd.DataFrame({
    'name': ['Charlie', 'Diana'],
    'score': [85, 90]
})

print(=== Исходный DataFrame ===)
print("df1:")
print(df1)
print("\ndf2:")
print(df2)

# 2. Внешнее соединение (по умолчанию) — сохранить все столбцы
print("\n=== join='outer' (внешнее соединение) ===)
print(pd.concat([df1, df2], join='outer'))

# 3. Внутреннее соединение — сохранить только общие столбцы
print("\n=== join='inner' (внутреннее соединение) ===)
print(pd.concat([df1, df2], join='inner'))

Ожидаемый вывод:

=== 原始 DataFrame ===
df1:
    name  age
0  Alice   25
1    Bob   30

df2:
      name  score
0  Charlie     85
1    Diana     90

=== join='outer' (外连接) ===
      name   age  score
0    Alice  25.0   NaN
1      Bob  30.0   NaN
0  Charlie  NaN  85.0
1   Diana  NaN  90.0

=== join='inner' (内连接) ===
      name
0    Alice
1      Bob
0  Charlie
1  Diana

Анализ кода:

  • join='outer'(по умолчанию) сохраняет все столбцы, отсутствующие столбцы заполняютсяNaN。
  • join='inner'сохраняет только столбцы, общие для обоих DataFrame (здесь этоname)。

Совет: pd.concat()подходит для простых операций конкатенации. Если вам нужно более сложное слияние (например, сопоставление на основе значений столбцов), обратитесь кpd.merge()функцию.

Pandas 常用函数Pandas: общие функции

Другие расширения