Pandas — типовые операции при анализе данных
Назначение
Сводка типовых вызовов pandas, которые закрывают большинство задач при исследовании таблицы в ноутбуке или скрипте: от read_csv() до экспорта отчёта. Команды сгруппированы по смыслу, как в учебных шпаргалках по DataFrame.
Для очистки (пропуски, дубликаты, типы) — подробный порядок шагов в 427. Для merge, pivot и календарных срезов — 331. Те же операции в Polars, SQL и PySpark — 426.
df — DataFrame, col — имя столбца. Примеры рассчитаны на import pandas as pd. После загрузки полезно сразу выполнить df.head(), df.info() и df.describe().
Загрузка данных
| Формат | Команда | Заметка |
|---|---|---|
| CSV | df = pd.read_csv("file.csv") | Кодировка: encoding="utf-8"; типы: dtype={"id": str} |
| Excel | df = pd.read_excel("file.xlsx", sheet_name="Sheet1") | Нужен пакет openpyxl для .xlsx |
| SQL | df = pd.read_sql(query, connection) | Через драйвер или SQLAlchemy |
| JSON | df = pd.read_json("file.json") | Для вложенных структур иногда нужен json_normalize |
| Parquet | df = pd.read_parquet("file.parquet") | Столбцовый формат, быстрый повторный чтение |
read_csv() — самый частый вход: разделитель, кавычки и пустые ячейки как NaN подбираются автоматически; при сомнениях смотрите df.info().
Выбор и фильтрация
| Задача | Команда | Комментарий |
|---|---|---|
| Один столбец | df["col"] | Возвращает Series |
| По меткам | df.loc[row_label, "col"] | Строка и столбец по имени; срез df.loc["a":"c"] включает правую границу |
| По позиции | df.iloc[0:5, 0:2] | Первые 5 строк, первые 2 столбца; правая граница исключается |
| Условие в строке | df.query("col > 5") | Удобно для нескольких полей; имена с пробелами — в обратных кавычках |
| Значение из списка | df[df["col"].isin(["A", "B"])] | Аналог IN в SQL |
При комбинации условий в [] используйте &, |, ~ и скобки: df[(df["a"] > 0) & (df["b"] == "x")]. Подробнее про loc / iloc — 331.
Преобразование таблицы
| Задача | Команда | Комментарий |
|---|---|---|
| Группировка и агрегаты | df.groupby("col").agg({"col2": ["mean", "sum"]}) | Именованные агрегаты: .agg(total=("amount", "sum")) |
| Соединение таблиц | df.merge(df2, on="key", how="left") | how: inner, left, right, outer |
| Сводная таблица | df.pivot_table(values="val", index="idx", columns="cat", aggfunc="sum") | Как свод в Excel |
| Сортировка | df.sort_values(["col1", "col2"]) | ascending=[True, False] для разных направлений |
| Широкий → длинный | df.melt(id_vars=["id"], value_vars=["A", "B"]) | Перед построением графиков по категориям |
| Функция по столбцу | df["col"].apply(lambda x: x * 2) | По строкам медленнее: axis=1; предпочитайте векторизацию |
groupby() в паре с agg() — основной способ собрать статистику по регионам, месяцам или статусам в несколько строк кода.
Статистика и описательный анализ
| Задача | Команда | Комментарий |
|---|---|---|
| Сводка по числам | df.describe() | count, mean, std, квантили; категории — include="object" |
| Агрегаты по столбцу | df["col"].agg(["mean", "median", "std"]) | Список функций в одном вызове |
| Частоты | df["col"].value_counts(normalize=True) | normalize=True — доли от общего числа |
| Корреляция | df.corr(method="pearson") | Матрица между числовыми столбцами |
| Ковариация | df.cov() | Линейная связь в парах признаков |
| Квантили | df["col"].quantile([0.25, 0.5, 0.75]) | Медиана — 0.5 |
После describe() имеет смысл проверить выбросы и распределения на графике (df.plot, Seaborn) — см. обзор pandas и визуализации.
Очистка
| Задача | Команда | Комментарий |
|---|---|---|
| Удалить пропуски | df.dropna(subset=["col"], how="any") | how="all" — строка полностью пустая |
| Заполнить вперёд | df["col"].ffill() | Для всей таблицы: df.ffill() |
| Дубликаты | df.drop_duplicates(subset=["col"]) | keep="first" / "last" |
| Замена значений | df["col"].replace({"old": "new"}) | Несколько пар в одном словаре |
| Категориальный тип | df["col"].astype("category") | Экономия памяти на повторяющихся строках |
| Интерполяция | df["col"].interpolate(method="linear") | Для рядов с упорядоченным индексом; по времени — method="time" |
Расширенные таблицы и мини-пайплайн очистки — 427.
Временные ряды
Индекс должен быть типа DatetimeIndex (часто после df["date"] = pd.to_datetime(df["date"]) и df = df.set_index("date")).
| Задача | Команда | Комментарий |
|---|---|---|
| Агрегация по периоду | df["val"].resample("M").mean() | "M" — месяц; "D" — день; "W" — неделя |
| Скользящее среднее | df["val"].rolling(window=7).mean() | Сглаживание шума |
| Сдвиг по времени | df["val"].shift(periods=1) | Лаг на одну строку |
| Календарный диапазон | pd.date_range("2024", periods=12, freq="M") | Генерация меток без исходной таблицы |
| Регулярная сетка | series.asfreq("D", method="ffill") | Заполнение пропущенных дат в ряду |
| Формат даты в строку | df["date"].dt.strftime("%Y-%m-%d") | После pd.to_datetime |
Примеры resample, rolling и срезов по периоду — 331.
Строковые столбцы
Доступ через .str (векторизованные операции, без цикла по строкам).
| Задача | Команда | Комментарий |
|---|---|---|
| Подстрока / шаблон | df["col"].str.contains("pattern") | RegEx, regex=True |
| Извлечь группу | df["col"].str.extract(r"(\d+)") | Первая группа в скобках |
| Разделить | df["col"].str.split("_").str[0] | Часть до первого _ |
| Регистр | df["col"].str.lower() | Также upper, title |
| Пробелы по краям | df["col"].str.strip() | lstrip, rstrip |
| Нормализация пробелов | df["col"].str.replace(r"\s+", " ", regex=True) | Несколько пробелов → один |
Имена столбцов с пробелами часто приводят к единому виду: df.columns = df.columns.str.strip().str.lower().
Дополнительные приёмы
| Задача | Команда | Комментарий |
|---|---|---|
| Цепочка с функцией | df.pipe(func) | func принимает DataFrame и возвращает DataFrame |
| Выражение над столбцами | pd.eval("df1 + df2") | Ускорение на больших таблицах при совместимых типах |
| Память | df.memory_usage(deep=True) | Оценка перед загрузкой ещё одного файла |
| Только числа | df.select_dtypes(include=["number"]) | Исключить строки и категории перед corr |
| Топ-N | df.nlargest(5, "col") | nsmallest для минимумов |
| Списки в ячейках | df.explode("col") | Одна строка на каждый элемент списка |
Экспорт результатов
| Формат | Команда | Заметка |
|---|---|---|
| CSV | df.to_csv("output.csv", index=False) | index=False — без служебного индекса |
| Excel | df.to_excel("output.xlsx", sheet_name="Sheet1") | Индекс: параметр index |
| Parquet | df.to_parquet("output.parquet") | Удобно для промежуточных витрин |
| JSON | df.to_json("output.json", orient="records") | orient="records" — список объектов по строкам |
Практические советы
- После фильтрации сохраняйте явную копию:
subset = df[df["col"] > 0].copy()— так реже появляетсяSettingWithCopyWarning. - Цепочка методов читается сверху вниз:
df.dropna().assign(ratio=lambda x: x["a"] / x["b"]).groupby("region").mean(). - Повторяющиеся строки (страна, статус, SKU) храните как
category— меньше RAM и быстрееgroupby. inplace=Trueменяет объект на месте; в скриптах и ноутбуках чаще пишутdf = df.dropna(), чтобы проще откатывать шаг.
См. также
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Интерпретация данных представляет собой процесс перевода количественных результатов анализа в качественное понимание явлений и процессов. Big Data — это относительное состояние, при котором объём данных превышает возможности традиционных систем хранения и обработки с точки зрения производительности, стоимости или масштабируемости. Data Science - междисциплинарный подход к извлечению знаний из данных через статистику, моделирование и предметную экспертизу. Дата-майнинг и KDD - связь с полным циклом от постановки задачи до интерпретации найденных закономерностей в данных. Критическое мышление в анализе. Фиксация на цифрах и ложь в статистике. Интегрированная система управления инженерными и бытовыми компонентами жилого пространства, построенная на принципах автоматизации. Поддержка физической активности, повышение эффективности тренировок, контроль состояния организма. Базовые показатели. Как работать с представлениями данных. ИИ в анализе данных - автоматизация поиска закономерностей и поддержка решений с помощью машинного обучения и нейросетевых моделей. Причинно-следственные связи в анализе - как действия и условия порождают измеримые результаты и выводы. Потоковая аналитика в реальном времени - обработка событий по мере поступления и извлечение сигналов без обязательного долгого хранения сырых данных. Описательная статистика служит для краткого обобщения свойств набора данных. Она позволяет понять центральную тенденцию, разброс и форму распределения.Анализ данных
Big Data
Data Science
Дата майнинг
Ошибки интерпретации и манипуляции статистикой
Умный дом
Технологии в спорте
Основы статистики
Как использовать ИИ для анализа данных
Причинно-следственный анализ
Потоковая аналитика в реальном времени
Python для анализа данных