pandas

Материал из llmdocs — справочник разработчика
Портал: Python
pandas
Типбиблиотека анализа данных
АвторУэс Маккинни
Создана2008 (AQR Capital), открыт код в 2009
ЯзыкиPython, Cython, C
ЛицензияBSD-3-Clause
Основные объектыDataFrame (таблица), Series (столбец)
ОсноваNumPy, Apache Arrow (опционально)
АльтернативыPolars, DuckDB

pandas — библиотека Python для работы с табличными данными. Её основной объект — DataFrame, таблица со строками и именованными столбцами разных типов, похожая на лист Excel или таблицу базы данных, но управляемая кодом. pandas читает данные из CSV, Excel, JSON, Parquet и SQL, позволяет фильтровать, группировать, объединять и переформатировать их и сохранять результат обратно.

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

История

Уэс Маккинни начал писать pandas в 2008 году в инвестиционной компании AQR Capital, где ему не хватало удобных средств анализа финансовых данных в Python; в 2009 году код открыли. Название происходит от термина эконометрики panel data и от «Python data analysis». Маккинни написал о библиотеке книгу «Python for Data Analysis», третье издание которой доступно бесплатно онлайн.[3] pandas построена на массивах NumPy; с версии 2.0 (2023) столбцы можно хранить и в формате Apache Arrow, что ускоряет работу со строками и пропусками.[6]

Основы

import pandas as pd

df = pd.read_csv("orders.csv", parse_dates=["created_at"])
df.head()            # первые строки
df.info()            # столбцы, типы, пропуски
df.describe()        # статистика по числовым столбцам

paid = df[df["status"] == "paid"]                         # фильтрация строк
big = df.query("total > 5000 and city == 'Москва'")       # то же строкой запроса
df["total_with_vat"] = df["total"] * 1.2                  # новый столбец
df.loc[df["total"] < 0, "total"] = 0                      # изменение по условию

Series — один столбец с индексом, DataFrame — набор Series с общим индексом. Индексация df.loc[строки, столбцы] работает по меткам, df.iloc[...] — по позициям.[2]

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

summary = (
    df.groupby("city")
      .agg(orders=("id", "count"), revenue=("total", "sum"), avg_check=("total", "mean"))
      .sort_values("revenue", ascending=False)
)

monthly = df.set_index("created_at").resample("MS")["total"].sum()   # выручка по месяцам
pivot = df.pivot_table(index="city", columns="status", values="total", aggfunc="sum")

Схема «разделить — применить — объединить» (split-apply-combine) — основа анализа: данные делятся на группы, к каждой применяется функция, результаты собираются в таблицу. Это аналог GROUP BY в SQL.

Объединение таблиц

customers = pd.read_sql("SELECT id, name, segment FROM customers", engine)
merged = df.merge(customers, left_on="customer_id", right_on="id", how="left")
both = pd.concat([df_2025, df_2026], ignore_index=True)

merge — аналог JOIN в SQL (how="inner" | "left" | "right" | "outer"), concat склеивает таблицы по строкам или столбцам.

Пропуски и типы

Пропуски обозначаются NaN, None или pd.NA; их находят isna(), удаляют dropna() и заполняют fillna(). Правильные типы экономят память и ускоряют работу: category для столбцов с небольшим числом значений, даты вместо строк, типы с поддержкой пропусков (Int64, string) вместо object.

Производительность

  • Векторизация вместо циклов. df.apply и особенно iterrows() выполняют Python-код для каждой строки и медленны; операции над целыми столбцами и встроенные методы — в разы быстрее.
  • Форматы. Parquet читается быстрее CSV, хранит типы и сжимает данные.
  • Copy-on-Write. Новая модель копирования делает поведение предсказуемым: изменение производной таблицы не меняет исходную, а предупреждение SettingWithCopyWarning уходит в прошлое.[4]
  • Объём. pandas держит данные в памяти одной машины; для таблиц, которые в неё не помещаются, нужны другие инструменты.

Polars и другие альтернативы

Инструмент Особенности
pandas самая большая экосистема, привычный API, огромное число примеров
Polars написан на Rust, многопоточный, ленивые запросы с оптимизатором, обычно заметно быстрее[5]
DuckDB встраиваемая аналитическая СУБД: SQL прямо по файлам Parquet и CSV и по таблицам pandas
PySpark, Dask распределённая обработка на кластерах

Многие задачи удобно решать комбинацией: DuckDB или Polars для тяжёлых преобразований, pandas — для финальной обработки и совместимости с библиотеками визуализации и машинного обучения. Обмен данными между ними почти без копирования обеспечивает формат Apache Arrow.

Советы

  • Начинайте анализ с df.info() и df.describe(), проверяйте типы и пропуски сразу после загрузки.
  • Пишите преобразования цепочками методов — их легче читать и отлаживать.
  • Фиксируйте версии pandas в проекте: поведение некоторых операций меняется между мажорными версиями.

Краткое введение — руководство «10 minutes to pandas», полная справка — документация pandas.[2][1]

См. также

Источники

  1. pandas — документация
  2. pandas — 10 minutes to pandas
  3. Wes McKinney — Python for Data Analysis, 3rd ed. (open access)
  4. pandas — Copy-on-Write
  5. Polars — документация
  6. Apache Arrow