Открыть сервис

Pandas

Pandas — это высокоуровневая библиотека для языка программирования Python, предназначенная для обработки и анализа структурированных данных. Pandas предоставляет гибкие и выразительные структуры данных (прежде всего, DataFrame и Series) и широкий набор методов для их загрузки, очистки, преобразования, агрегации, визуализации и экспорта. Благодаря удобству, производительности и интеграции с другими научными библиотеками Python (NumPy, Matplotlib, SciKit-Learn), Pandas стала де-факто стандартом для работы с табличными и временными рядами в области науки о данных, машинного обучения, финансового анализа, биоинформатики и статистики.

История

Предпосылки и создание

Библиотека Pandas была создана в 2008 году разработчиком Уэсом Маккинни (Wes McKinney), работавшим в инвестиционной компании AQR Capital Management. До появления Pandas для анализа данных в Python использовались встроенные списки, словари и библиотека NumPy, которые не предоставляли удобных средств для работы с табличными данными, метками строк и столбцов, обработкой пропусков и сводными таблицами. Маккинни разработал Pandas как ответ на потребность в инструменте, подобном R Data Frames, но интегрированном в экосистему Python.

Первые версии

В 2009 году первая публичная версия (0.1) была выпущена под лицензией BSD. К 2011 году Pandas стала самостоятельным проектом с открытым исходным кодом, поддерживаемым сообществом. В 2012 году Уэс Маккинни опубликовал книгу «Python for Data Analysis», которая способствовала массовому распространению библиотеки. В 2015 году вышла версия 0.17, в которой появилась поддержка категориальных типов данных и улучшенная работа с памятью. В 2018 году вышла версия 0.23, а в 2020 году — долгожданный релиз 1.0, который зафиксировал стабильное API и внёс множество улучшений в производительность и документацию.

Основные структуры данных

Series

Series — это одномерный массив с метками (индексами), способный хранить данные любого типа (целые числа, числа с плавающей точкой, строки, объекты). Каждому элементу соответствует метка, которая может быть как числом, так и строкой. Series можно создавать из списков, словарей, массивов NumPy или скалярных значений.

`` import pandas as pd s = pd.Series([1, 2, 3], index=['a', 'b', 'c']) ``

DataFrame

DataFrame — это двумерная табличная структура данных, состоящая из строк и столбцов, каждый из которых является объектом Series. DataFrame можно рассматривать как аналог электронной таблицы (Excel) или реляционной таблицы базы данных. Он поддерживает разнородные типы данных в разных столбцах, имеет индексы строк и столбцов, и допускает сложные операции среза, фильтрации и агрегации.

`` df = pd.DataFrame({ 'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'city': ['Moscow', 'Saint Petersburg', 'Kazan'] }) ``

Index и MultiIndex

Index — это объект, содержащий метки строк или столбцов. Он может быть целочисленным, строковым, временным или иерархическим (MultiIndex). MultiIndex позволяет создавать многомерные индексы, например, для сводных таблиц по годам и регионам.

Основные возможности

Загрузка и запись данных

Pandas поддерживает чтение и запись в различные форматы файлов:

  • CSVpd.read_csv() и df.to_csv()
  • Excelpd.read_excel() и df.to_excel()
  • SQLpd.read_sql_query() и df.to_sql()
  • JSONpd.read_json() и df.to_json()
  • HTMLpd.read_html()
  • Паркет (Parquet), HDF5, Feather — форматы с высокой производительностью и сжатием

Индексация, фильтрация и сортировка

Для доступа к данным используются методы .loc[] (доступ по меткам), .iloc[] (доступ по целочисленным позициям),.at[] (для одиночных значений),.iat[], а также булева индексация (df[df['age'] > 30]). Сортировка производится с помощью df.sort_values() по одному или нескольким столбцам.

Обработка пропусков

Пропущенные значения (NaN) обрабатываются методами isna(), fillna(), dropna(). Возможна замена пропусков константой, средним, медианой или интерполяцией.

Агрегация и группировка

Метод groupby() группирует данные по одному или нескольким столбцам и позволяет применять агрегирующие функции (sum, mean, count, std, custom). Мощный метод .agg() поддерживает несколько функций одновременно. pivot_table() создаёт сводные таблицы, аналогично функциям Excel.

Объединение и слияние данных

Pandas предоставляет SQL-подобные операции слияния (merge(), join()) и конкатенации (concat()). Слияние может быть по индексам или по произвольным столбцам, с поддержкой типов join: inner, outer, left, right.

Работа с временными рядами

Библиотека имеет богатые средства для работы с датами и временем: типы datetime64, Timedelta, Period, методы resample(), shift(), rolling(). Это позволяет легко создавать скользящие средние, агрегации по периодам (день, месяц, квартал, год) и выполнять операции с временными смещениями.

Преобразование данных

apply() и applymap() позволяют применять пользовательские функции ко всем элементам или столбцам/строкам. map() заменяет значения по словарю. melt() и pivot() изменяют форму таблицы (перевод из широкого формата в длинный и обратно).

Применение

В науке о данных и машинном обучении Pandas используется на этапе очистки и предварительной обработки данных (EDA — exploratory data analysis). Модели машинного обучения обычно принимают на вход массивы NumPy, но Pandas упрощает загрузку, фильтрацию, агрегацию и объединение признаковых таблиц. Библиотека тесно интегрирована с Scikit-Learn.

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

В биоинформатике Pandas используется для анализа матриц экспрессии генов, метаданных образцов, результатов секвенирования (FASTA, VCF) и других табличных данных.

В бизнес-аналитике Pandas служит заменой Excel для автоматизации отчётов, построения дашбордов (через Plotly, Dash, Bokeh) и интеграции с базами данных.

Критика и ограничения

Несмотря на широкую популярность, Pandas имеет ряд недостатков. Основной критикой является низкая производительность при работе с очень большими наборами данных (миллиарды строк), так как библиотека работает в оперативной памяти и не поддерживает распределённые вычисления на нескольких ядрах из коробки. Для таких задач применяются Dask, Vaex или Polars. Также Pandas имеет сложный и не всегда логичный API, особенно в части индексации и модификации данных, что может приводить к ошибкам (например, цепное присваивание). Версия 2.0 (2023) ввела поддержку строковых массивов с обращением через .str, но по-прежнему сохраняет проблемы с потреблением памяти.

Интересные факты

  • Название «Pandas» происходит от термина «panel data» (панельные данные), хотя библиотека вышла далеко за рамки только этого типа данных.
  • По состоянию на 2025 год Pandas является одной из самых популярных библиотек Python: её загружает более 100 миллионов раз в месяц через PyPI.
  • Внутри Pandas интенсивно использует библиотеку NumPy для оптимизированных вычислений на C-уровне.
  • С версии 1.0 Pandas поддерживает собственный copy-on-write, который планируется сделать поведением по умолчанию в будущем.

Источники

  • Wes McKinney. «Python for Data Analysis» (3rd edition). O'Reilly Media, 2022.
  • Официальная документация Pandas (pandas.pydata.org).
  • «Pandas 2.0: What’s New?» — статья на Towards Data Science, 2023.
  • Stack Overflow Developer Survey 2024 — раздел «Most Used Libraries».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →