Home » Примеры concat() в Pandas — объединение DataFrame
Примеры concat() в Pandas — объединение DataFrame

Примеры concat() в Pandas — объединение DataFrame

Если ты когда-нибудь сталкивался с обработкой табличных данных в Python, то наверняка слышал о Pandas. Это тот самый инструмент, который позволяет не только быстро анализировать логи, парсить отчёты, но и автоматизировать рутину, связанную с данными. Сегодня разберём одну из самых полезных фич — объединение DataFrame с помощью concat(). Почему это важно? Потому что в реальной жизни данные редко бывают в одном файле или базе — их приходится собирать по кусочкам, склеивать, фильтровать, а потом уже анализировать. И вот тут concat() — твой лучший друг. В этой статье расскажу, как это работает, как быстро всё настроить, приведу реальные примеры (в том числе с подводными камнями), и покажу, как concat() может упростить жизнь не только дата-аналитикам, но и тем, кто занимается автоматизацией серверов, мониторингом и DevOps-рутиной.

Как работает concat() в Pandas?

В двух словах: concat() — это функция, которая позволяет склеивать (конкатенировать) несколько DataFrame или Series в один. Причём делать это можно как по строкам (добавлять новые строки), так и по столбцам (добавлять новые колонки). В отличие от merge() и join(), concat() не требует наличия ключей для объединения — просто берёт и склеивает, как есть. Это удобно, когда у тебя, например, пачка логов с одинаковой структурой, но из разных источников, или когда ты хочешь добавить к существующему DataFrame новые метрики.

  • axis=0 — склеиваем по строкам (добавляем новые записи, вертикально)
  • axis=1 — склеиваем по столбцам (добавляем новые поля, горизонтально)
  • ignore_index=True — пересчитываем индексы, чтобы не было дублей
  • keys — добавляем уровни иерархии (MultiIndex), чтобы потом было проще разбирать

Всё это позволяет быстро собирать данные из разных источников, не заморачиваясь на ручную синхронизацию индексов и ключей.

Как быстро и просто всё настроить?

Первое, что нужно — установить Pandas (если ещё не стоит). Обычно это делается одной командой:


pip install pandas

Дальше — импортируем библиотеку и создаём пару DataFrame для экспериментов:


import pandas as pd

df1 = pd.DataFrame({
'host': ['srv1', 'srv2'],
'cpu': [70, 80]
})

df2 = pd.DataFrame({
'host': ['srv3', 'srv4'],
'cpu': [60, 90]
})

Теперь можно склеить их по строкам:


result = pd.concat([df1, df2], axis=0, ignore_index=True)
print(result)

Результат:


host cpu
0 srv1 70
1 srv2 80
2 srv3 60
3 srv4 90

Если нужно добавить новые метрики (например, память), склеиваем по столбцам:


df3 = pd.DataFrame({
'mem': [16, 32, 24, 48]
})

result2 = pd.concat([result, df3], axis=1)
print(result2)

Результат:


host cpu mem
0 srv1 70 16
1 srv2 80 32
2 srv3 60 24
3 srv4 90 48

Примеры, схемы, практические советы

Положительный кейс: Склеиваем логи с разных серверов

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


import glob

all_files = glob.glob("logs/*.csv")
df_list = [pd.read_csv(f) for f in all_files]
logs = pd.concat(df_list, ignore_index=True)

Теперь у тебя единая таблица, которую можно фильтровать, группировать, строить графики — всё, что душе угодно.

Отрицательный кейс: Несовпадающие столбцы

А теперь представь, что в одном из файлов кто-то добавил новый столбец, или наоборот, забыл один из старых. Что будет?


df1 = pd.DataFrame({'host': ['srv1'], 'cpu': [70]})
df2 = pd.DataFrame({'host': ['srv2'], 'mem': [32]})

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

Результат:


host cpu mem
0 srv1 70.0 NaN
1 srv2 NaN 32.0

Pandas аккуратно подставит NaN там, где данных не хватает. Это удобно, но если ты потом будешь считать среднее или суммировать — не забудь обработать пропуски (fillna(), dropna()).

Сравнение concat() с merge() и join()

Функция Когда использовать Плюсы Минусы
concat() Склеить таблицы без ключей (по строкам/столбцам) Быстро, просто, не требует ключей Нет гибкой логики объединения по значениям
merge() Объединить по ключевым столбцам (аналог SQL JOIN) Гибко, можно выбирать тип объединения (inner, outer, left, right) Нужно явно указывать ключи
join() Присоединить по индексу или столбцу Удобно для добавления новых колонок Меньше контроля, чем у merge()

Команды и быстрые рецепты


# Склеить по строкам (вертикально)
pd.concat([df1, df2], axis=0)

# Склеить по столбцам (горизонтально)
pd.concat([df1, df2], axis=1)

# Пересчитать индексы
pd.concat([df1, df2], ignore_index=True)

# Добавить уровень иерархии (MultiIndex)
pd.concat([df1, df2], keys=['first', 'second'])

# Склеить только общие столбцы
pd.concat([df1, df2], join='inner')

# Заполнить пропуски после склейки
result.fillna(0)

Похожие решения, программы и утилиты

  • numpy.concatenate() — для массивов, но не для табличных данных с разными столбцами
  • dask.dataframe.concat() — масштабируемый аналог для больших данных (https://docs.dask.org/en/latest/dataframe.html, rel=”nofollow”)
  • SQL UNION — если работаешь с базами, но там нет гибкости Pandas
  • csvkit — набор утилит для работы с CSV в командной строке (https://csvkit.readthedocs.io/en/latest/, rel=”nofollow”)

Статистика и сравнение с другими решениями

Pandas — один из самых популярных инструментов для работы с табличными данными в Python. По данным Stack Overflow Developer Survey 2023, Pandas входит в топ-10 самых используемых библиотек для анализа данных. В отличие от чистого Python (list + dict), Pandas concat() работает в разы быстрее на больших объёмах данных (десятки и сотни тысяч строк). Dask — альтернатива для распределённых вычислений, но если у тебя нет кластера, Pandas — оптимальный выбор.

Интересные факты и нестандартные способы использования

  • Можно склеивать не только DataFrame, но и Series — удобно, если нужно собрать метрики по разным параметрам в одну таблицу.
  • concat() поддерживает MultiIndex — если добавить параметр keys, получишь иерархическую структуру, которую потом можно разворачивать и группировать.
  • Можно использовать concat() для быстрого объединения результатов парсинга логов с разных серверов — например, когда скрипт мониторинга собирает данные в параллельных потоках.
  • Если склеивать DataFrame с разными колонками, Pandas автоматически подгоняет структуру, что удобно для агрегации нестандартных отчётов.

Новые возможности для автоматизации и скриптов

Используя concat(), можно:

  • Автоматически собирать отчёты по мониторингу с разных серверов и сервисов (например, CPU, RAM, диски, сетевые метрики) в единую таблицу.
  • Быстро объединять результаты парсинга логов (например, nginx, apache, systemd) для дальнейшего анализа или алертов.
  • Генерировать сводные отчёты по резервному копированию, аптайму, обновлениям пакетов — просто склеивая результаты скриптов.
  • Интегрировать данные из разных источников (CSV, JSON, базы данных) для построения дашбордов или отправки в Grafana/Prometheus.

Всё это позволяет не только ускорить обработку данных, но и минимизировать количество ручной работы — а значит, меньше багов и больше времени на интересные задачи.

Выводы и рекомендации

Pandas concat() — это must-have инструмент для всех, кто работает с табличными данными в Python. Он прост, быстр и гибок: позволяет склеивать данные из разных источников, не заморачиваясь на ключи и индексы. Особенно полезен для автоматизации рутинных задач — сбор логов, отчётов, метрик, агрегации данных для мониторинга и алертов. Главное — помнить о несовпадающих столбцах и пропусках, а также не забывать про пересчёт индексов (ignore_index=True).

Если ты хочешь автоматизировать сбор и обработку данных на своих серверах, Pandas concat() — твой выбор. А если нужен надёжный VPS или выделенный сервер для экспериментов и продакшена — смело переходи по ссылкам: VPS или выделенный сервер.

Официальная документация Pandas concat(): https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html

Если остались вопросы — пиши в комментарии, разберём любые кейсы. Удачи в автоматизации и пусть твои DataFrame всегда будут чистыми и аккуратными!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked