pandas — библиотека Python для работы с таблицами: загрузить выгрузку из CSV или Excel, выбрать нужные строки, посчитать итоги по группам, соединить несколько таблиц. Если вы работали в Excel, многое покажется знакомым — только вместо щелчков мышью строки кода, которые можно повторить на новых данных.
Весь курс мы будем разбирать данные вымышленного интернет-магазина «Кофейная лавка» за 2025 год: зерновой кофе,
чай, сладости, посуда. Файл data/shop_orders.csv уже лежит рядом с уроком. Каждая его строка — одна позиция
заказа: какой товар, по какой цене и сколько штук купили, в каком городе и через какой канал.
Загрузка
pandas подключают под коротким именем pd, а таблицу из файла читает функция pd.read_csv:
import pandas as pd
orders = pd.read_csv("data/shop_orders.csv")
orders| order_id | date | customer_id | city | channel | category | product | price | quantity | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 10001 | 2025-01-01 | C095 | Москва | маркетплейс | Аксессуары | Кофемолка ручная | 3200 | 2 |
| 1 | 10001 | 2025-01-01 | C095 | Москва | маркетплейс | Чай | Травяной сбор 50 г | 260 | 1 |
| 2 | 10002 | 2025-01-01 | C059 | Москва | приложение | Сладости | Шоколад горький | 180 | 1 |
| 3 | 10002 | 2025-01-01 | C059 | Москва | приложение | Чай | Чёрный чай 100 г | 350 | 1 |
| 4 | 10003 | 2025-01-01 | C203 | Казань | сайт | Кофе | Эфиопия 250 г | 790 | 1 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2443 | 11573 | 2025-12-31 | C196 | Казань | приложение | Кофе | Эфиопия 250 г | 790 | 3 |
| 2444 | 11574 | 2025-12-31 | C067 | Москва | сайт | Сладости | Печенье овсяное | 150 | 1 |
| 2445 | 11575 | 2025-12-31 | C057 | Новосибирск | маркетплейс | Сладости | Печенье овсяное | 150 | 2 |
| 2446 | 11575 | 2025-12-31 | C057 | Новосибирск | маркетплейс | Аксессуары | Фильтры бумажные | 240 | 1 |
| 2447 | 11576 | 2025-12-31 | C158 | Казань | приложение | Сладости | Зефир | 210 | 2 |
2448 rows × 9 columns
CSV (comma-separated values, «значения через запятую») — простой текстовый формат таблиц: одна строка файла —
одна строка таблицы, значения разделены запятыми, в первой строке — названия столбцов. read_csv возвращает
таблицу — объект DataFrame («датафрейм»). У неё есть столбцы с названиями и строки, а слева — индекс
(index): подписи строк, пока это просто номера 0, 1, 2… Строк много, поэтому показаны только первые и последние,
а внизу — размер таблицы.
Если путь к файлу неверный, read_csv сообщит об этом ошибкой:
pd.read_csv("shop_orders.csv")FileNotFoundError: [Errno 44] No such file or directory: 'shop_orders.csv'
Первые и последние строки
На большую таблицу целиком смотреть неудобно: обычно начинают с нескольких строк сверху. Их показывает метод
head:
orders.head()| order_id | date | customer_id | city | channel | category | product | price | quantity | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 10001 | 2025-01-01 | C095 | Москва | маркетплейс | Аксессуары | Кофемолка ручная | 3200 | 2 |
| 1 | 10001 | 2025-01-01 | C095 | Москва | маркетплейс | Чай | Травяной сбор 50 г | 260 | 1 |
| 2 | 10002 | 2025-01-01 | C059 | Москва | приложение | Сладости | Шоколад горький | 180 | 1 |
| 3 | 10002 | 2025-01-01 | C059 | Москва | приложение | Чай | Чёрный чай 100 г | 350 | 1 |
| 4 | 10003 | 2025-01-01 | C203 | Казань | сайт | Кофе | Эфиопия 250 г | 790 | 1 |
Без аргумента head возвращает 5 строк, нужное число пишут в скобках: orders.head(10). Последние строки
показывает tail:
orders.tail(3)| order_id | date | customer_id | city | channel | category | product | price | quantity | |
|---|---|---|---|---|---|---|---|---|---|
| 2445 | 11575 | 2025-12-31 | C057 | Новосибирск | маркетплейс | Сладости | Печенье овсяное | 150 | 2 |
| 2446 | 11575 | 2025-12-31 | C057 | Новосибирск | маркетплейс | Аксессуары | Фильтры бумажные | 240 | 1 |
| 2447 | 11576 | 2025-12-31 | C158 | Казань | приложение | Сладости | Зефир | 210 | 2 |
Что в столбцах: date — дата покупки, customer_id — код покупателя, city — город доставки, channel — где
оформлен заказ (сайт, приложение или маркетплейс), category и product — категория и товар, price — цена
за штуку в рублях, quantity — сколько штук. Один заказ (order_id) может занимать несколько строк — по строке
на каждый товар в нём.
Сохраните в переменную top3 первые три строки таблицы orders.
head в скобках.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
top3 = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
top3 = orders.head(3)head — это метод: действие, которое таблица умеет выполнять. Метод вызывают скобками, даже когда
аргументов нет. Если скобки забыть, Python ничего не выполнит, а покажет сам метод:
orders.head<bound method NDFrame.head of order_id date customer_id city channel category \
0 10001 2025-01-01 C095 Москва маркетплейс Аксессуары
1 10001 2025-01-01 C095 Москва маркетплейс Чай
2 10002 2025-01-01 C059 Москва приложение Сладости
3 10002 2025-01-01 C059 Москва приложение Чай
4 10003 2025-01-01 C203 Казань сайт Кофе
... ... ... ... ... ... ...
2443 11573 2025-12-31 C196 Казань приложение Кофе
2444 11574 2025-12-31 C067 Москва сайт Сладости
2445 11575 2025-12-31 C057 Новосибирск маркетплейс Сладости
2446 11575 2025-12-31 C057 Новосибирск маркетплейс Аксессуары
2447 11576 2025-12-31 C158 Казань приложение Сладости
product price quantity
0 Кофемолка ручная 3200 2
1 Травяной сбор 50 г 260 1
2 Шоколад горький 180 1
3 Чёрный чай 100 г 350 1
4 Эфиопия 250 г 790 1
... ... ... ...
2443 Эфиопия 250 г 790 3
2444 Печенье овсяное 150 1
2445 Печенье овсяное 150 2
2446 Фильтры бумажные 240 1
2447 Зефир 210 2
[2448 rows x 9 columns]>Размер и столбцы
Сколько в таблице строк и столбцов, показывает shape. Это не метод, а атрибут — свойство таблицы, которое
уже посчитано и просто хранится. Скобки у атрибута не пишут:
orders.shape(2448, 9)
shape — кортеж (tuple) из двух чисел: сначала строки, потом столбцы. Число строк можно достать индексом, как
из списка, — orders.shape[0]. То же число возвращает len(orders):
print(orders.shape[0])
print(len(orders))2448 2448
Первое число в orders.shape — 2448. Что оно значит?
shape — это (строки, столбцы). Но одна строка здесь — одна позиция заказа, а в заказе бывает несколько товаров, поэтому заказов меньше, чем строк. Как их посчитать, разберём в уроке про осмотр данных.Сохраните число строк таблицы orders в n_rows, а число столбцов — в n_cols.
orders.shape: первое — строки, второе — столбцы.orders.shape[0]; у второго индекс 1.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
n_rows = ...
n_cols = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
n_rows = orders.shape[0]
n_cols = orders.shape[1]Названия столбцов хранит атрибут columns:
orders.columnsIndex(['order_id', 'date', 'customer_id', 'city', 'channel', 'category',
'product', 'price', 'quantity'],
dtype='str')Это не список, а объект pandas Index — набор подписей. В конце указан тип значений, dtype='str': названия —
строки. Когда нужен обычный список Python, columns передают в list(...).
Сохраните в names обычный список Python (list) с названиями столбцов таблицы orders — по порядку.
list(...) превращает в список любой набор значений, который можно перебрать в цикле.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
names = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
names = list(orders.columns)Прочитать только начало файла
У read_csv много параметров — они описаны в справочнике. Один пригодится сразу: nrows — сколько строк
прочитать. Он выручает, когда файл огромный, а посмотреть хочется только начало:
pd.read_csv("data/shop_orders.csv", nrows=4)| order_id | date | customer_id | city | channel | category | product | price | quantity | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 10001 | 2025-01-01 | C095 | Москва | маркетплейс | Аксессуары | Кофемолка ручная | 3200 | 2 |
| 1 | 10001 | 2025-01-01 | C095 | Москва | маркетплейс | Чай | Травяной сбор 50 г | 260 | 1 |
| 2 | 10002 | 2025-01-01 | C059 | Москва | приложение | Сладости | Шоколад горький | 180 | 1 |
| 3 | 10002 | 2025-01-01 | C059 | Москва | приложение | Чай | Чёрный чай 100 г | 350 | 1 |
Параметр передают по имени: nrows=4. Так же — имя=значение — передают и другие параметры функций pandas.
Загрузите из файла data/shop_orders.csv только первые 100 строк и сохраните таблицу в sample. Таблицу
orders не меняйте.
read_csv после пути к файлу, через запятую.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
sample = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
sample = pd.read_csv("data/shop_orders.csv", nrows=100)Итоги
import pandas as pd, затемpd.read_csv("путь")— и в руках таблица DataFrame.head(n)иtail(n)— первые и последние строки. Методы вызывают скобками.shape— (строки, столбцы),len(таблица)— число строк,columns— названия столбцов. Это атрибуты, скобки у них не пишут.nrows=читает только начало файла.