Нашли ошибку?
Скачать чистый
урок 2 из 5≈ 15 минупражнения: 0 из 4

Столбец — это Series

Взять столбец таблицы, понять, из чего он состоит, посчитать по нему сумму, среднее, наибольшее и наименьшее и выполнить арифметику сразу со всем столбцом.

Python запустится при первом выполнении

Таблица состоит из столбцов. Почти любой вопрос к данным начинается с того, что мы берём нужный столбец: «какая средняя цена?» — столбец цен, «сколько штук продано?» — столбец количеств.

Берём столбец

Столбец достают квадратными скобками с его названием в кавычках — так же, как значение из словаря по ключу:

[ ]Столбец цен
import pandas as pd

orders = pd.read_csv("data/shop_orders.csv")
orders["price"]
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
0       3200
1        260
2        180
3        350
4        790
        ...
2443     790
2444     150
2445     150
2446     240
2447     210
Name: price, Length: 2448, dtype: int64

Это уже не таблица, а объект другого типа — Series («сирис», ряд): один столбец значений с подписями.

[ ]Таблица и столбец — разные типы
print(type(orders))
print(type(orders["price"]))
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
<class 'pandas.DataFrame'>
<class 'pandas.Series'>

В выводе Series слева — индекс (подписи строк, те же номера 0, 1, 2…, что у таблицы), справа — значения. Внизу три свойства: Name — название столбца, Length — число значений (его показывают только у длинного Series, который выведен не целиком) и dtype — тип значений. int64 — целые числа, float64 — дробные, str — текст.

Название нужно писать точно, с учётом регистра букв. Столбца Price с большой буквы в таблице нет:

[ ]Столбца с таким названием нетошибка: KeyError
orders["Price"]
Ошибкасохранённый · нажмите «Выполнить», чтобы получить свой
KeyError: 'Price'
[ ]Упражнение 1Столбец городов решено

Сохраните в переменную cities столбец city таблицы orders.

cities = ...

Знакомые head и tail работают и у Series:

[ ]Первые три значения столбца
orders["product"].head(3)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
0      Кофемолка ручная
1    Травяной сбор 50 г
2       Шоколад горький
Name: product, dtype: str

То, что написано внизу вывода, можно получить и по отдельности — это атрибуты Series:

[ ]Название, тип и индекс
prices = orders["price"]
print(prices.name)
print(prices.dtype)
print(prices.index)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
price
int64
RangeIndex(start=0, stop=2448, step=1)

RangeIndex(start=0, stop=2448, step=1) — индекс из номеров от 0 до 2447: как range(0, 2448) в Python, конец не включается.

Итоги по столбцу

У Series есть методы, которые сворачивают весь столбец в одно число: sum — сумма, mean — среднее, max и min — наибольшее и наименьшее.

[ ]Сумма, максимум, минимум и среднее цен
print(prices.sum())
print(prices.max())
print(prices.min())
print(prices.mean())
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
1685990
3200
150
688.7214052287582

Сумма цен сама по себе мало что значит — это просто пример. А вот самая высокая цена (3200 ₽), самая низкая (150 ₽) и средняя (около 689 ₽) уже кое-что говорят о магазине.

[ ]Упражнение 2Сколько штук продано решено

В столбце quantity — сколько штук товара в каждой строке. Сохраните в total_items общее число проданных штук, в max_items — наибольшее количество в одной строке, в mean_items — среднее количество в строке.

total_items = ...
max_items = ...
mean_items = ...

Арифметика со столбцом

Со столбцом можно считать как с одним числом — операция применится к каждому значению. Цикл не нужен. Цены со скидкой 10 %:

[ ]Столбец умножить на число
prices * 0.9
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
0       2880.0
1        234.0
2        162.0
3        315.0
4        711.0
         ...
2443     711.0
2444     135.0
2445     135.0
2446     216.0
2447     189.0
Name: price, Length: 2448, dtype: float64

Результат — новый Series той же длины. Типом стал float64: после умножения на 0.9 числа дробные. Сам столбец в таблице orders при этом не изменился.

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

[ ]Столбец умножить на столбец
revenue = orders["price"] * orders["quantity"]
revenue
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
0       6400
1        260
2        180
3        350
4        790
        ...
2443    2370
2444     150
2445     300
2446     240
2447     420
Length: 2448, dtype: int64

В первой строке 3200 ₽ × 2 штуки = 6400 ₽. У результата нет названия — Name внизу не показан: pandas не знает, как назвать произведение двух разных столбцов.

Вопрос

Список Python при умножении на 2 удваивает длину: [1, 2] * 2 — это [1, 2, 1, 2]. А сколько значений будет в orders["quantity"] * 2?

[ ]Упражнение 3Распродажа решено

Магазин думает о распродаже со скидкой 15 % на всё. Сохраните в sale_price цену каждой строки со скидкой, а в sale_total — какой была бы выручка за год при таких ценах и тех же количествах.

sale_price = ...
sale_total = ...

Результат арифметики — обычный Series, у него есть все те же методы.

[ ]Упражнение 4Самая дорогая строка решено

В переменной revenue из демонстрации выше — выручка каждой строки. Сохраните в max_revenue наибольшую выручку одной строки, а в avg_revenue — среднюю.

max_revenue = ...
avg_revenue = ...

Итоги

  • таблица["название"] — столбец, объект Series: индекс слева, значения справа.
  • name, dtype, index — название, тип значений и индекс столбца.
  • sum(), mean(), max(), min() — итог по столбцу одним числом.
  • Арифметика со столбцом выполняется для каждого значения; два столбца считаются построчно.

Подробнее в справочнике

Нашли ошибку?