- Home »

Примеры 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 всегда будут чистыми и аккуратными!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.