Конкатенация данных Pandas (concat / append)
Конкатенация данных соединяет несколько DataFrame или Series вместе по строкам или по столбцам.pd.concatявляется основной функцией конкатенации,appendявляется упрощённой версией (устаревшая, вместо неё рекомендуется concat).
Базовое использование concat
pd.concat()Можно конкатенировать несколько DataFrame или Series вдоль оси.
Конкатенация по строкам (вертикальное объединение)
Пример
import pandas as pd
# Создать два DataFrame
df1 = pd.DataFrame({
"Имя": ["Чжан Сань", "Ли Сы"],
"Возраст": [25, 30]
})
df2 = pd.DataFrame({
"Имя": ["Ван У", "Чжао Лю"],
"Возраст": [28, 35]
})
print("DataFrame 1:")
print(df1)
print()
print("DataFrame 2:")
print(df2)
print()
# Объединить по вертикали
result = pd.concat([df1, df2], ignore_index=True)
print("Результат объединения:")
print(result)
# Создать два DataFrame
df1 = pd.DataFrame({
"Имя": ["Чжан Сань", "Ли Сы"],
"Возраст": [25, 30]
})
df2 = pd.DataFrame({
"Имя": ["Ван У", "Чжао Лю"],
"Возраст": [28, 35]
})
print("DataFrame 1:")
print(df1)
print()
print("DataFrame 2:")
print(df2)
print()
# Объединить по вертикали
result = pd.concat([df1, df2], ignore_index=True)
print("Результат объединения:")
print(result)
Объединение по столбцам (горизонтальное размещение)
Пример
import pandas as pd
df1 = pd.DataFrame({
"Имя": ["Чжан Сань", "Ли Сы", "Ван У"]
})
df2 = pd.DataFrame({
"Возраст": [25, 30, 28],
"Город": ["Пекин", "Шанхай", "Гуанчжоу"]
})
# Горизонтальная конкатенация
result = pd.concat([df1, df2], axis=1)
print("Горизонтальная конкатенация:")
print(result)
df1 = pd.DataFrame({
"Имя": ["Чжан Сань", "Ли Сы", "Ван У"]
})
df2 = pd.DataFrame({
"Возраст": [25, 30, 28],
"Город": ["Пекин", "Шанхай", "Гуанчжоу"]
})
# Горизонтальная конкатенация
result = pd.concat([df1, df2], axis=1)
print("Горизонтальная конкатенация:")
print(result)
axis=0Означает конкатенацию по строкам (добавление строк),axis=1Означает конкатенацию по столбцам (добавление столбцов).
Обработка дублирующихся индексов
ignore_index
Пример
import pandas as pd
df1 = pd.DataFrame({
"Имя": ["Чжан Сань", "Ли Сы"],
"Возраст": [25, 30]
}, index=[0, 1])
df2 = pd.DataFrame({
"Имя": ["Ван У", "Чжао Лю"],
"Возраст": [28, 35]
}, index=[0, 1])
# Сохранение исходных индексов по умолчанию
print("Сохранение исходных индексов:")
print(pd.concat([df1, df2]))
print()
# Игнорирование старых индексов и их пересоздание
print("Игнорирование исходных индексов:")
print(pd.concat([df1, df2], ignore_index=True))
df1 = pd.DataFrame({
"Имя": ["Чжан Сань", "Ли Сы"],
"Возраст": [25, 30]
}, index=[0, 1])
df2 = pd.DataFrame({
"Имя": ["Ван У", "Чжао Лю"],
"Возраст": [28, 35]
}, index=[0, 1])
# Сохранение исходных индексов по умолчанию
print("Сохранение исходных индексов:")
print(pd.concat([df1, df2]))
print()
# Игнорирование старых индексов и их пересоздание
print("Игнорирование исходных индексов:")
print(pd.concat([df1, df2], ignore_index=True))
Проверка дублирующихся ключей
Пример
import pandas as pd
df1 = pd.DataFrame({
"A": [1, 2]
})
df2 = pd.DataFrame({
"A": [3, 4]
})
# Проверить наличие дублирующихся ключей
print("Объект проверки:")
print(pd.concat([df1, df2], verify_integrity=True))
df1 = pd.DataFrame({
"A": [1, 2]
})
df2 = pd.DataFrame({
"A": [3, 4]
})
# Проверить наличие дублирующихся ключей
print("Объект проверки:")
print(pd.concat([df1, df2], verify_integrity=True))
Обработка несоответствий столбцов
Параметр join
Пример
import pandas as pd
df1 = pd.DataFrame({
"A": [1, 2, 3],
"B": ["a", "b", "c"]
})
df2 = pd.DataFrame({
"B": ["x", "y", "z"],
"C": [10, 20, 30]
})
print("df1:")
print(df1)
print()
print("df2:")
print(df2)
print()
# Внешнее соединение (по умолчанию): сохранить все столбцы
print("Внешнее соединение (сохранить все столбцы):")
print(pd.concat([df1, df2], join="outer"))
print()
# Внутреннее соединение: оставить только общие столбцы
print("Внутреннее соединение (оставить только общие столбцы):")
print(pd.concat([df1, df2], join="inner"))
df1 = pd.DataFrame({
"A": [1, 2, 3],
"B": ["a", "b", "c"]
})
df2 = pd.DataFrame({
"B": ["x", "y", "z"],
"C": [10, 20, 30]
})
print("df1:")
print(df1)
print()
print("df2:")
print(df2)
print()
# Внешнее соединение (по умолчанию): сохранить все столбцы
print("Внешнее соединение (сохранить все столбцы):")
print(pd.concat([df1, df2], join="outer"))
print()
# Внутреннее соединение: оставить только общие столбцы
print("Внутреннее соединение (оставить только общие столбцы):")
print(pd.concat([df1, df2], join="inner"))
Добавить только новые столбцы
Пример
import pandas as pd
df1 = pd.DataFrame({
"Имя": ["Чжан Сань", "Ли Сы"],
"Возраст": [25, 30]
})
df2 = pd.DataFrame({
"Город": ["Пекин", "Шанхай"]
})
# Добавить столбцы df2 в df1
result = pd.concat([df1, df2], axis=1)
print("Добавить только новые столбцы:")
print(result)
df1 = pd.DataFrame({
"Имя": ["Чжан Сань", "Ли Сы"],
"Возраст": [25, 30]
})
df2 = pd.DataFrame({
"Город": ["Пекин", "Шанхай"]
})
# Добавить столбцы df2 в df1
result = pd.concat([df1, df2], axis=1)
print("Добавить только новые столбцы:")
print(result)
Параметр keys для создания иерархического индекса
Пример
import pandas as pd
df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})
df3 = pd.DataFrame({"A": [9, 10], "B": [11, 12]})
# Использовать параметр keys для создания иерархического индекса
result = pd.concat([df1, df2, df3], keys=["Первый год", "Второй год", "Третий год"])
print("Конкатенация с иерархическим индексом:")
print(result)
print()
# Получить данные из иерархического индекса
print("Получить данные за второй год:")
print(result.loc["Second year"])
df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})
df3 = pd.DataFrame({"A": [9, 10], "B": [11, 12]})
# Использовать параметр keys для создания иерархического индекса
result = pd.concat([df1, df2, df3], keys=["Первый год", "Второй год", "Третий год"])
print("Конкатенация с иерархическим индексом:")
print(result)
print()
# Получить данные из иерархического индекса
print("Получить данные за второй год:")
print(result.loc["Second year"])
Практика: объединение данных за несколько месяцев
Пример
import pandas as pd
# Смоделировать данные о продажах за несколько месяцев
jan_sales = pd.DataFrame({
"Month": ["2024-01"] * 3,
"Продукт": ["A", "B", "C"],
"Sales": [100, 150, 80]
})
feb_sales = pd.DataFrame({
"Month": ["2024-02"] * 3,
"Продукт": ["A", "B", "C"],
"Sales": [120, 140, 90]
})
mar_sales = pd.DataFrame({
"Month": ["2024-03"] * 3,
"Продукт": ["A", "B", "C"],
"Sales": [110, 160, 85]
})
# Объединить данные за первый квартал
quarterly = pd.concat([jan_sales, feb_sales, mar_sales], ignore_index=True)
print("Сводка за первый квартал:")
print(quarterly)
print()
# Агрегировать по месяцам
monthly_summary = quarterly.groupby("Month")["Sales"].sum()
print("Сводка продаж по месяцам:")
print(monthly_summary)
# Смоделировать данные о продажах за несколько месяцев
jan_sales = pd.DataFrame({
"Month": ["2024-01"] * 3,
"Продукт": ["A", "B", "C"],
"Sales": [100, 150, 80]
})
feb_sales = pd.DataFrame({
"Month": ["2024-02"] * 3,
"Продукт": ["A", "B", "C"],
"Sales": [120, 140, 90]
})
mar_sales = pd.DataFrame({
"Month": ["2024-03"] * 3,
"Продукт": ["A", "B", "C"],
"Sales": [110, 160, 85]
})
# Объединить данные за первый квартал
quarterly = pd.concat([jan_sales, feb_sales, mar_sales], ignore_index=True)
print("Сводка за первый квартал:")
print(quarterly)
print()
# Агрегировать по месяцам
monthly_summary = quarterly.groupby("Month")["Sales"].sum()
print("Сводка продаж по месяцам:")
print(monthly_summary)
Метод append (устаревший)
DataFrame.append()Устарел в Pandas 2.0 и не рекомендуется. Пожалуйста, используйтеpd.concat()вместо этого.
# 不推荐(已废弃) result = df1.append(df2) # 推荐 result = pd.concat([df1, df2])
Другие расширения
concatЯвляется стандартным методом для объединения данных в Pandas, с лучшей производительностью и более полной функциональностью.