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 поддерживает чтение и запись в различные форматы файлов:
- CSV —
pd.read_csv()иdf.to_csv() - Excel —
pd.read_excel()иdf.to_excel() - SQL —
pd.read_sql_query()иdf.to_sql() - JSON —
pd.read_json()иdf.to_json() - HTML —
pd.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 →