Функция Pandas concat()
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
Пример
# 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
Анализ кода:
pd.concat([s1, s2])Объедините два Series вертикально в более длинный Series.- По умолчанию исходный индекс сохраняется, поэтому будут дублирующиеся значения индекса 0, 1, 2.
- Настройка
ignore_index=Trueможет заново сгенерировать непрерывный числовой индекс.
Пример 2: Горизонтальное объединение DataFrame
Использованиеaxis=1можно объединять несколько DataFrame по столбцам, что очень полезно при слиянии разных полей.
Пример
# 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Параметр может помочь нам идентифицировать источник данных, что очень полезно при объединении содержимого из разных наборов данных.
Пример
# 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параметр для управления способом обработки.
Пример
# 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: общие функции