Статья Автор: Деникина Н.В., Деникин А.В.

Pandas DataFrame

🐼
Pandas DataFrame
Создание DataFrame
Что такое DataFrame
 

DataFrame — это двумерная таблица (как в Excel). Каждая колонка — объект Series. Все колонки имеют общий индекс (строки).

Основной способ создать DataFrame — передать словарь списков в pd.DataFrame():

import pandas as pd

data = {
    'name':  ['Anna', 'Boris', 'Clara'],
    'score': [90, 85, 78]
}

df = pd.DataFrame(data)

Ключи словаря

Становятся названиями колонок

Значения (списки)

Становятся данными в соответствующих колонках

Важно!

Длины всех списков должны совпадать, иначе ошибка

Осмотр данных
Зачем осматривать
 

Первое, что делает аналитик — быстро оценивает, что за данные перед ним: размер таблицы, типы колонок, есть ли пропуски.

Атрибут / Метод Что возвращает
df.shape Кортеж (строки, колонки) — размер таблицы
df.columns Названия всех колонок
df.index Индекс строк
df.dtypes Типы данных каждой колонки
df.head(n) Первые n строк (по умолчанию 5)
df.info() Сводка: типы, количество не-null, память
df.describe() Статистика числовых колонок (среднее, мин, макс…)
Подсказка: shape, columns, dtypes — это атрибуты (без скобок). А head(), info(), describe() — это методы (со скобками).
Выборка данных
Выбор колонок

df['name']

Одна колонка → возвращает Series

df[['name', 'score']]

Несколько колонок → возвращает DataFrame. Обрати внимание на двойные скобки!

Выбор строк: loc и iloc
Способ Как работает Пример
df.loc[метка] По метке индекса df.loc[2] — строка с меткой 2
df.iloc[номер] По позиции (0, 1, 2…) df.iloc[2] — третья строка
Частая ошибка: Если индекс числовой и начинается с 0, то loc[2] и iloc[2] дадут одно и то же. Но если индекс нестандартный — результаты будут разные!
Подсказка: df.loc[5, 'price'] = 100 — изменит значение в строке 5, колонке 'price'.
Вычисления и новые колонки
Принцип
 

В pandas можно создавать новые колонки на основе существующих — точно так же, как формулы в Excel.

# Арифметическая колонка
df['total'] = df['price'] * df['quantity']

# Булева колонка (True / False)
df['is_big'] = df['total'] > 100000

Арифметика

Операции +, -, *, / применяются поэлементно ко всем строкам

Сравнение

Операторы >, <, ==, != возвращают колонку из True/False

Пропуски (NaN)
Главное правило NaN: Любая арифметическая операция с NaN даёт NaN. Это «чёрная дыра» — если в данных пропуск, он заражает весь результат.
5 * NaN  →  NaN
NaN + 10 →  NaN
NaN > 100False
Метод Что делает
df['col'].isna() Маска: True где пропуск, False где данные есть
df['col'].fillna(value) Заполняет все NaN указанным значением
df['col'].mean() Среднее значение (NaN автоматически пропускаются)
df['col'].dropna() Удаляет строки с NaN
Подсказка: Можно заполнить пропуски средним: df['price'].fillna(df['price'].mean())
Фильтрация
Принцип
 

df[условие] — внутри квадратных скобок передаём булеву маску. Pandas оставит только те строки, где условие = True.

df[df['city'] == 'Moscow']
# Хотя бы одно условие True
df[(df['category'] == 'Laptop') | (df['price'] > 50000)]
# Оба условия True
df[(df['city'] == 'SPb') & (df['total'] > 50000)]
Скобки обязательны! Каждое условие нужно оборачивать в круглые скобки при использовании & и |, иначе Python запутается в приоритетах операций.
Сортировка
Вызов Результат
df.sort_values('price') По возрастанию (по умолчанию)
df.sort_values('price', ascending=False) По убыванию
Подсказка: Методы можно вызывать друг за другом (chaining). Например, отсортировать и сразу взять первые 3 строки:
df.sort_values('total', ascending=False).head(3)
Экспорт данных
df.to_csv('report.csv')                 # с индексом
df.to_csv('report.csv', index=False)    # без индекса
Зачем index=False? По умолчанию pandas записывает числовой индекс как первый столбец файла. Обычно это не нужно — параметр index=False убирает лишнюю колонку.

to_excel()

Сохраняет в формат .xlsx

to_json()

Сохраняет в формат .json

Интерактивное демо
Попробуй методы pandas
 

Выбери метод и посмотри результат для учебной таблицы:

← Нажми «Выполнить»
Проверь себя
Вопрос 1 из 5

1. Как выбрать несколько колонок из DataFrame?

 

2. Что вернёт выражение 5 * NaN?

 

3. Какой оператор используется для «И» при фильтрации pandas?

 

4. Как сохранить DataFrame в CSV без лишнего столбца индексов?

 

5. Чем отличается df.iloc[2] от df.loc[2]?

 
Шпаргалка
Создание
pd.DataFrame(dict)
Размер
df.shape
Первые строки
df.head(n)
Сводка
df.info()
Статистика
df.describe()
1 колонка
df['col']
N колонок
df[['c1','c2']]
По позиции
df.iloc[n]
По метке
df.loc[label]
Новая колонка
df['new'] = expr
Пропуски
fillna(), mean(), isna()
Фильтр
df[условие]
ИЛИ / И
(c1) | (c2) / (c1) & (c2)
Сортировка
sort_values('col')
Экспорт
to_csv(f, index=False)
Печать