Pandas — Python-библиотека для работы с табличными данными, которую в 2008 году создал Уэс Маккинни (Wes McKinney). Название расшифровывается как PANel DAta — «панельные данные». Стандартный псевдоним при импорте — pd: import pandas as pd.
Если Excel — это калькулятор, то pandas — Excel на максималках: без зависаний, для миллионов строк, с возможностью записать весь пайплайн обработки как воспроизводимый скрипт. Библиотека умеет загружать CSV и Excel, фильтровать строки, группировать данные, очищать пропуски и передавать результаты в модели машинного обучения — за несколько строк кода вместо часов ручной работы.
Учитесь бесплатно за счёт государства
Экономия до 100 000 ₽ на любой программе
В этой статье — полный разбор библиотеки pandas в питоне: от установки и базовых структур до группировки, объединения таблиц и шпаргалки с ключевыми методами.
Pandas — открытая Python-библиотека для анализа и обработки структурированных данных, распространяемая по лицензии BSD-3-Clause. Построена поверх NumPy — высокопроизводительной библиотеки для работы с массивами на языке C. Именно это обеспечивает pandas скорость при работе с большими объёмами данных.
Уэс Маккинни разработал её в 2008 году, работая в хедж-фонде: нужен был инструмент для анализа финансовых временных рядов, которого в Python тогда не существовало. Сегодня pandas входит в стандартный стек специалиста по данным.
Основные сферы применения:
Библиотека pandas закрывает большинство задач аналитика данных без подключения к базам данных или специализированного программного обеспечения.
| Критерий |
Excel |
SQL |
pandas |
|---|---|---|---|
| Лимит строк | ~1 млн | Без ограничений (СУБД) | Без ограничений (RAM) |
| Автоматизация через код | ❌ | ✅ | ✅ |
| Интеграция с ML | ❌ | ❌ | ✅ |
| Нужна СУБД | ❌ | ✅ | ❌ |
| Воспроизводимый пайплайн | ❌ | Частично | ✅ |
Вывод прост: pandas объединяет возможности Excel и SQL в одном инструменте — без необходимости поднимать базу данных и без ограничений по количеству строк.
Есть три пути подключить pandas к проекту: через менеджер пакетов pip, через дистрибутив Anaconda или в облаке через Google Colab. Выбор зависит от ситуации: новый проект — pip; готовая среда для анализа данных — Anaconda; быстрый старт без настройки — Colab.

Для нового проекта — стандартный путь через pip:
pip install pandas
pip install matplotlib openpyxl
matplotlib потребуется для визуализации, openpyxl — для чтения Excel-файлов. После установки подключайте библиотеку одной строкой:
import pandas as pd
Псевдоним pd — неписаный стандарт Python-сообщества. Вы встретите его в документации, на Stack Overflow и в учебниках. Использовать другой псевдоним технически можно, но незачем: это усложнит чтение чужого кода и поиск ответов в интернете.
Anaconda — дистрибутив Python для анализа данных: pandas, NumPy и Jupyter Notebook уже включены, дополнительно устанавливать ничего не нужно. В составе Anaconda — более 250 готовых пакетов.
Google Colab — облачная среда в браузере. Pandas предустановлена, видеокарта (GPU) доступна без оплаты. Достаточно открыть новый блокнот и сразу написать import pandas as pd — работать можно немедленно. Это лучший выбор для быстрого старта и учёбы без настройки окружения.

Pandas предоставляет две ключевые структуры данных: Series — одномерный массив с индексом, и DataFrame — двумерная таблица. Каждый столбец DataFrame является объектом Series. Всё остальное в pandas — операции над этими двумя структурами.
Series — это одна колонка данных с именованным индексом. Создаётся из списка, словаря или массива NumPy:
# Из списка
s = pd.Series([85000, 120000, 70000], name=’Зарплата’)
# Из словаря — ключи становятся индексом
s = pd.Series({‘Алексей’: 85000, ‘Мария’: 120000, ‘Игорь’: 70000})
По умолчанию индекс — числовой (RangeIndex: 0, 1, 2…). Можно задать строки, даты или любые метки. Если при создании из словаря передать явный индекс с ключами, которых нет в словаре, на этих позициях появится NaN — специальный маркер пропущенного значения по стандарту IEEE 754, который распространяется при арифметике (любое выражение с NaN возвращает NaN).
Ключевые атрибуты Series: .name (имя), .index (индекс), .dtype (тип данных), .values (массив NumPy). Series — подкласс массива NumPy, поэтому с ней работают все операции NumPy.
DataFrame — это таблица, где строки адресуются через индекс, а столбцы — через имена. Аналог: лист Excel или таблица в реляционной базе данных. Создаётся из словаря списков:
df = pd.DataFrame({
‘Имя’: [‘Алексей’, ‘Мария’, ‘Игорь’],
‘Роль’: [‘Data Analyst’, ‘ML Engineer’, ‘Data Analyst’],
‘Зарплата’: [85000, 130000, 90000]
})
Три составляющие DataFrame: данные, имена столбцов (горизонтальный адрес) и индекс строк (вертикальный адрес). Удобная мнемоника — «морской бой»: чтобы найти ячейку, нужно указать ряд × колонку.
Типы данных в столбцах: int64, float64, object (текст), datetime64. Один DataFrame может содержать столбцы разных типов одновременно.
В реальных задачах данные не создают вручную — их загружают из файлов. Pandas поддерживает форматы CSV, Excel, JSON, SQL, Parquet, HTML. Паттерн один: функции read_* для загрузки, методы to_* для сохранения.
Загрузить CSV-файл в DataFrame — одна строка:
df = pd.read_csv(‘data.csv’)
Полезные параметры:
Практический совет: выгрузки из 1С почти всегда используют sep=’;’. Без этого параметра вся строка окажется в одной ячейке вместо нескольких столбцов.
Для работы с Excel необходим пакет openpyxl:
df = pd.read_excel(‘report.xlsx’, sheet_name=’Январь’)
Параметр sheet_name принимает название листа или его порядковый номер. Если не указать — загрузится первый лист.
Сохранение — через to_csv() или to_excel(). Здесь главное золотое правило:
df.to_csv(‘output.csv’, index=False)
Параметр index=False обязателен. Без него при следующей загрузке файла появится лишний столбец Unnamed: 0 — индекс DataFrame сохранился как отдельная колонка. Классическая ловушка для начинающих, которая теряет время на отладку.
Первый шаг после загрузки — разведочный анализ. Три инструмента позволяют за минуту получить полную картину: что за данные, сколько пропусков, какие типы и сколько памяти занимает датасет.
df.head() # первые 5 строк
df.tail(3) # последние 3 строки
df.shape # (число строк, число столбцов)
head() — первое, что нужно запустить после read_csv: он покажет, правильно ли разобрались столбцы, нет ли «кривых» заголовков, адекватны ли значения. Не пропускайте этот шаг даже в давно знакомых наборах данных.
shape — быстрая проверка: DataFrame загружен полностью и столбцов ровно столько, сколько ожидалось.
df.info() # типы данных, Non-Null Count, потребление памяти
df.describe() # count, mean, std, min, max, квартили
info() диагностирует типы данных и пропуски. Лайфхак: если числовой столбец показывает тип object — в данных «грязные» значения (пробел, буква), из-за которых pandas не смог определить тип. Также info() показывает потребление памяти — важно при работе с большими файлами.
describe() возвращает сводную статистику. Медиана (50% квартиль) надёжнее среднего при выбросах: если среди сотрудников окажется один с зарплатой в 5 млн, среднее исказится, а медиана останется стабильной.
Обращение к одному столбцу через квадратные скобки: df[‘Имя’] → возвращает Series. Несколько столбцов — в двойных скобках: df[[‘Имя’, ‘Зарплата’]] → возвращает DataFrame. Типичная ошибка новичка: df[‘Имя’, ‘Зарплата’] (без внутренних скобок) → KeyError.
| loc |
iloc |
|
|---|---|---|
| По чему ищет | По метке индекса | По целочисленной позиции |
| Принимает | Строки, даты, любые метки | Только целые числа (0, 1, 2…) |
| Пример | df.loc[‘Алексей’] | df.iloc[0] |
Мнемоника: iloc = integer location — всегда цифра. iloc[0] вернёт первую строку независимо от того, как называется её метка индекса. loc работает по метке: df.loc[‘2024-01-01’] найдёт строку с датой в индексе, а df.loc[‘Алексей’] — строку с именем.
Важный нюанс срезов: с loc границы включительные с обоих концов — df.loc[0:3] вернёт строки 0, 1, 2 и 3. В iloc — как в Python-списке: df.iloc[0:3] вернёт 0, 1, 2 (без 3).
Самый частый способ отбора строк — булева маска:
# Одно условие
df[df[‘Зарплата’] > 100000]
# AND — каждое условие в скобках
df[(df[‘Роль’] == ‘Data Analyst’) & (df[‘Зарплата’] > 80000)]
# OR
df[(df[‘Роль’] == ‘ML Engineer’) | (df[‘Зарплата’] > 120000)]
# Отрицание
df[~df[‘Роль’].isin([‘Manager’])]
Критически важно: каждое условие при & и | — в круглых скобках. Без них Python вычислит & раньше сравнения из-за приоритета операций, и результат окажется неверным.
Альтернатива — метод .query(): df.query(‘Зарплата > 100000’). Удобен при последовательном вызове методов цепочкой.
По оценкам специалистов в области анализа данных, значительная часть рабочего времени уходит на подготовку и очистку данных (Data Cleaning) — это норма. Pandas автоматизирует большинство рутинных операций.
# Сколько пропусков в каждой колонке
df.isna().sum()
# Удалить строки с пропусками (если их мало)
df_clean = df.dropna()
# Заполнить пропуски — числовые
df[‘Зарплата’] = df[‘Зарплата’].fillna(df[‘Зарплата’].mean())
# Заполнить пропуски — текстовые
df[‘Регион’] = df[‘Регион’].fillna(‘Не указан’)
Стратегия выбора: если пропусков менее 5% от строк — можно удалить через dropna(). При большем числе — заполняйте медианой (для числовых с выбросами) или средним (для равномерных данных). Удаление строк при значительном числе пропусков исказит выборку.
# Удалить дублирующиеся строки
df = df.drop_duplicates()
Хотите сменить профессию или повысить квалификацию?
Федеральный проект «Активные меры содействия занятости» даёт возможность пройти обучение бесплатно за счёт государства
# Переименовать столбцы
df = df.rename(columns={‘old_name’: ‘new_name’})
# Новый столбец через векторизацию — быстро
df[‘Бонус’] = df[‘Зарплата’] * 0.1
# Функциональный стиль — возвращает новый DataFrame
df = df.assign(Бонус=lambda x: x[‘Зарплата’] * 0.1)
Обратите внимание: столбец ‘Бонус’ вычисляется сразу для всех строк через векторизацию — операция применяется ко всему столбцу целиком. Никогда не создавайте столбцы через for-цикл с iterrows() — в следующем разделе объясним разницу в скорости.
groupby() — центральный метод для аналитики: сгруппировать данные по категориям, применить функцию и получить сводный результат. Это реализация паттерна Split-Apply-Combine (разделить — применить — собрать).
Три шага:
# Средняя зарплата по ролям
df.groupby(‘Роль’)[‘Зарплата’].mean()
# Множественная группировка
df.groupby([‘Роль’, ‘Город’])[‘Зарплата’].median()
Результат — Series, где индекс — уникальные значения группировки. Это прямой аналог SQL GROUP BY, только без базы данных.
Для нескольких метрик одновременно:
# Несколько функций сразу
df.groupby(‘Роль’)[‘Зарплата’].agg([‘mean’, ‘sum’, ‘count’])
# Именованные агрегации (pandas 0.25+)
result = df.groupby(‘Роль’).agg(
avg_salary=(‘Зарплата’, ‘mean’),
headcount=(‘Имя’, ‘count’),
max_salary=(‘Зарплата’, ‘max’)
)
Именованные агрегации — удобный синтаксис, появившийся в pandas версии 0.25: результирующие столбцы сразу получают читаемые имена без лишних вызовов .rename(). Удобно для финальных отчётов и дашбордов.
Аналог сводной таблицы Excel — прямо в коде:
pd.pivot_table(
df,
values=’Зарплата’,
index=’Роль’,
columns=’Город’,
aggfunc=’mean’,
fill_value=0
)
Параметр fill_value=0 заполняет пустые ячейки нулями — итоговая матрица получается без пропусков. На выходе — кросс-таблица «роль × город» со средними значениями зарплат в каждой ячейке.
Два основных инструмента: pd.concat() — склеить таблицы вертикально (добавить строки), pd.merge() — соединить горизонтально (JOIN по ключу).
df_all = pd.concat([df_jan, df_feb, df_mar], ignore_index=True)
Параметр ignore_index=True обязателен: без него индексы из каждого DataFrame сохранятся в итоговом — получится дублирование (0, 1, 2, 0, 1, 2). При обращении через loc это вызовет неожиданные результаты.
Типичный сценарий: ежемесячные выгрузки продаж по одинаковой структуре — объединить в годовой набор данных одной командой.
df_result = pd.merge(df_orders, df_clients, on=’client_id’, how=’left’)
Параметр how определяет тип объединения:
| how |
Логика |
SQL-аналог |
|---|---|---|
| ‘inner’ | Только совпадающие ключи | INNER JOIN |
| ‘left’ | Все строки левой таблицы + совпадения справа | LEFT JOIN |
| ‘right’ | Все строки правой таблицы + совпадения слева | RIGHT JOIN |
| ‘outer’ | Все строки обеих таблиц, NaN там, где нет совпадения | FULL OUTER JOIN |
Правило 90%: используйте how=’left’ — все строки левой таблицы сохранятся, а из правой подтянутся только совпадения. Это аналог функции ВПР (VLOOKUP) в Excel, только быстрее и без ограничений на размер таблицы.

Три правила эффективного кода на pandas: используй встроенную векторизацию вместо циклов, применяй apply() только там, где встроенного не хватает, пиши цепочки методов вместо промежуточных переменных.
# ❌ Медленно — Python-цикл по каждой строке
for index, row in df.iterrows():
if row[‘role’] == ‘Dev’:
df.at[index, ‘salary’] = row[‘salary’] * 1.2
# ✅ Быстро — векторизованная операция
df.loc[df[‘role’] == ‘Dev’, ‘salary’] *= 1.2
iterrows() перебирает каждую строку по одной в Python-цикле. На датасете из 2 млн строк это займёт минуты. Векторизованная операция работает через NumPy C-backend: разница в скорости составляет от 100 до 1000 раз.
Запомните: если вы пишете for с iterrows() — это сигнал остановиться и найти векторизованный аналог.
apply() — компромисс между гибкостью и скоростью:
# apply для нестандартной логики
df[‘category’] = df[‘salary’].apply(lambda x: ‘senior’ if x > 100000 else ‘junior’)
apply() — замаскированный for-цикл. Он медленнее встроенных методов, но быстрее iterrows(). Используйте для нестандартной логики: парсинг строк, сложные условия, обращение к внешним сервисам.
Цепочки методов (Method Chaining) делают код читаемым как рецепт сверху вниз:
result = (
df
.dropna()
.query(‘Зарплата > 50000’)
.groupby(‘Город’)[‘Зарплата’]
.mean()
.sort_values(ascending=False)
)
Скобки в начале позволяют переносить строки без символа \. Читается как последовательность действий: убрать пропуски → отфильтровать → сгруппировать → взять среднее → отсортировать.
Справочная таблица для повседневной работы. Охватывает около 90% операций, с которыми сталкивается аналитик данных. Сохраните в закладки — возвращаться к ней удобнее, чем листать полную документацию pandas на русском.
| Категория |
Метод |
Пример |
|---|---|---|
| I/O | read_csv() | pd.read_csv(‘f.csv’, sep=’;’) |
| I/O | read_excel() | pd.read_excel(‘f.xlsx’, sheet_name=0) |
| I/O | to_csv() | df.to_csv(‘out.csv’, index=False) |
| EDA | head() | df.head(10) |
| EDA | info() | df.info() |
| EDA | describe() | df.describe() |
| EDA | shape | df.shape |
| Индексация | loc[] | df.loc[‘label’] |
| Индексация | iloc[] | df.iloc[0:5] |
| Фильтрация | Булева маска | df[df[‘age’] > 18] |
| Фильтрация | query() | df.query(‘age > 18’) |
| Очистка | isna().sum() | df.isna().sum() |
| Очистка | fillna() | df[‘col’].fillna(0) |
| Очистка | dropna() | df.dropna() |
| Очистка | drop_duplicates() | df.drop_duplicates() |
| Трансформация | rename() | df.rename(columns={‘a’: ‘b’}) |
| Трансформация | assign() | df.assign(col=lambda x: …) |
| Группировка | groupby() | df.groupby(‘col’)[‘val’].mean() |
| Группировка | agg() | .agg(avg=(‘val’, ‘mean’)) |
| Объединение | concat() | pd.concat([df1, df2], ignore_index=True) |
| Объединение | merge() | pd.merge(df1, df2, on=’id’, how=’left’) |
Для визуализации добавьте df.plot() или df[‘col’].hist() — они работают через matplotlib, который устанавливается отдельно командой pip install matplotlib.
Три проверенных ресурса для углублённого освоения:
Освоить pandas с нуля до уровня, достаточного для работы аналитиком данных, реально за 2–3 месяца при системном подходе. Шпаргалка из этой статьи покрывает 90% задач, с которыми вы столкнётесь в первый год.
Если хотите освоить анализ данных с нуля и получить официальный документ об образовании — в рамках федерального проекта «Активные меры содействия занятости» доступна программа «Специалист по аналитике и базам данных в информационных системах» (256 часов). Обучение онлайн, в удобное время, без вложений — за счёт государственного финансирования. Смотрите каталог доступных программ.
Pandas — бесплатная Python-библиотека для анализа табличных данных. Название происходит от PANel DAta — «панельные данные». Создана в 2008 году Уэсом Маккинни. Две основные структуры: Series (одна колонка с индексом) и DataFrame (полноценная таблица). Позволяет загружать CSV и Excel, фильтровать строки, группировать и очищать данные — за несколько строк кода вместо сотен.
Excel зависает на таблицах свыше 1 млн строк и не поддерживает автоматизацию через код. Pandas обрабатывает сотни миллионов строк в памяти, весь пайплайн записывается как воспроизводимый скрипт, а результаты легко передаются в модели машинного обучения. Дополнительный плюс: pandas не требует системы управления базами данных, в отличие от SQL.
Series — одномерный массив с индексом (одна колонка данных). DataFrame — двумерная таблица, каждый столбец которой является объектом Series. Series используют для работы с одним показателем; DataFrame — когда нужны несколько признаков одновременно и важно совмещать операции над разными столбцами.
loc ищет строку по метке индекса (имя, дата, строковый ключ). iloc ищет по целочисленной позиции (0, 1, 2…). Мнемоника: iloc = integer location — всегда цифры. Если индекс таблицы строковый, iloc[0] всё равно вернёт первую строку по позиции, а loc[‘Алексей’] — строку с меткой «Алексей».
Базовая команда: df = pd.read_csv(‘data.csv’). Для файлов с разделителем «;» (1С, русский Excel): pd.read_csv(‘data.csv’, sep=’;’). Для кириллицы добавьте encoding=’utf-8′. Чтобы загрузить только часть файла: nrows=1000. После загрузки всегда выполняйте df.head() и df.info() для проверки корректности.
Сначала диагностика: df.isna().sum() — подсчёт пропусков в каждой колонке. Затем решение: если пропусков мало — df.dropna() (удалить строки); если много — df[‘col’].fillna(df[‘col’].mean()) для числовых или df[‘col’].fillna(‘Не указан’) для текстовых. Удаление строк искажает выборку, поэтому заполнение предпочтительнее при доле пропусков выше 5%.
Метод groupby() реализует паттерн Split-Apply-Combine. Базовый синтаксис: df.groupby(‘Роль’)[‘Зарплата’].mean(). Для нескольких агрегаций: .agg([‘mean’, ‘sum’, ‘count’]). Именованные агрегации (pandas 0.25+): df.groupby(‘Роль’).agg(avg=(‘Зарплата’, ‘mean’), count=(‘Имя’, ‘count’)) — результат сразу с читаемыми именами столбцов. Это аналог SQL GROUP BY.
Официальная документация (на английском): pandas.pydata.org. На русском: книга Уэса Маккинни «Python и анализ данных» — самое полное справочное руководство. Для практики без установки — Google Colab: открываете браузер, вводите import pandas as pd — и работаете. Шпаргалка в этой статье покрывает 90% повседневных операций.
Подайте заявку —
забронируйте место в группе
45 000 мест на 2026 год. Бесплатное обучение по федеральному проекту «Активные меры содействия занятости»