# pandas

> Библиотека Python для анализа табличных данных — объекты DataFrame и Series, чтение CSV, Excel и SQL, фильтрация, группировка, объединение и работа с временными рядами.

Источник: https://llmdocs.ru/wiki/pandas/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: библиотека анализа данных
- **Автор**: Уэс Маккинни
- **Создана**: 2008 (AQR Capital), открыт код в 2009
- **Языки**: Python, Cython, C
- **Лицензия**: BSD-3-Clause
- **Основные объекты**: DataFrame (таблица), Series (столбец)
- **Основа**: NumPy, Apache Arrow (опционально)
- **Альтернативы**: Polars, DuckDB
**pandas** — библиотека [Python](https://llmdocs.ru/wiki/python.md) для работы с табличными данными. Её основной объект — **DataFrame**, таблица со строками и именованными столбцами разных типов, похожая на лист Excel или таблицу [базы данных](https://llmdocs.ru/wiki/relational-database.md), но управляемая кодом. pandas читает данные из CSV, Excel, JSON, Parquet и SQL, позволяет фильтровать, группировать, объединять и переформатировать их и сохранять результат обратно.

pandas — стандартный инструмент аналитиков и специалистов по данным: на нём делается очистка данных, разведочный анализ в [Jupyter](https://llmdocs.ru/wiki/jupyter.md) и подготовка признаков для [машинного обучения](https://llmdocs.ru/wiki/machine-learning.md).

## История

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

## Основы

```python
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]

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

```python
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](https://llmdocs.ru/wiki/sql.md).

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

```python
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](https://llmdocs.ru/wiki/rust.md), многопоточный, ленивые запросы с оптимизатором, обычно заметно быстрее[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]

## См. также

- [NumPy](https://llmdocs.ru/wiki/numpy.md)
- [Jupyter](https://llmdocs.ru/wiki/jupyter.md)
- [SQL](https://llmdocs.ru/wiki/sql.md)
- [scikit-learn](https://llmdocs.ru/wiki/scikit-learn.md)
- [Колоночное хранение](https://llmdocs.ru/wiki/columnar-storage.md)

## Источники

1. [pandas — документация](https://pandas.pydata.org/docs/)
2. [pandas — 10 minutes to pandas](https://pandas.pydata.org/docs/user_guide/10min.html)
3. [Wes McKinney — Python for Data Analysis, 3rd ed. (open access)](https://wesmckinney.com/book/)
4. [pandas — Copy-on-Write](https://pandas.pydata.org/docs/user_guide/copy_on_write.html)
5. [Polars — документация](https://pola.rs/)
6. [Apache Arrow](https://arrow.apache.org/)
