Таблица состоит из столбцов. Почти любой вопрос к данным начинается с того, что мы берём нужный столбец: «какая средняя цена?» — столбец цен, «сколько штук продано?» — столбец количеств.
Берём столбец
Столбец достают квадратными скобками с его названием в кавычках — так же, как значение из словаря по ключу:
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 с большой буквы в таблице нет:
orders["Price"]KeyError: 'Price'
Сохраните в переменную cities столбец city таблицы orders.
Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
cities = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
cities = orders["city"]Знакомые 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 ₽) уже кое-что говорят о магазине.
В столбце quantity — сколько штук товара в каждой строке. Сохраните в total_items общее число проданных
штук, в max_items — наибольшее количество в одной строке, в mean_items — среднее количество в строке.
orders["quantity"], затем вызовите у него метод.orders["quantity"].sum() — не забудьте скобки после названия метода.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
total_items = ...
max_items = ...
mean_items = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
total_items = orders["quantity"].sum()
max_items = orders["quantity"].max()
mean_items = orders["quantity"].mean()Арифметика со столбцом
Со столбцом можно считать как с одним числом — операция применится к каждому значению. Цикл не нужен. Цены со скидкой 10 %:
prices * 0.90 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"]
revenue0 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?
sum().Магазин думает о распродаже со скидкой 15 % на всё. Сохраните в sale_price цену каждой строки со скидкой,
а в sale_total — какой была бы выручка за год при таких ценах и тех же количествах.
0.85..sum() возьмите в скобки.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
sale_price = ...
sale_total = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
sale_price = orders["price"] * 0.85
sale_total = (sale_price * orders["quantity"]).sum()Результат арифметики — обычный Series, у него есть все те же методы.
В переменной revenue из демонстрации выше — выручка каждой строки. Сохраните в max_revenue наибольшую
выручку одной строки, а в avg_revenue — среднюю.
revenue — такой же Series, как столбец таблицы: у него есть max() и mean().Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
max_revenue = ...
avg_revenue = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
max_revenue = revenue.max()
avg_revenue = revenue.mean()Итоги
таблица["название"]— столбец, объект Series: индекс слева, значения справа.name,dtype,index— название, тип значений и индекс столбца.sum(),mean(),max(),min()— итог по столбцу одним числом.- Арифметика со столбцом выполняется для каждого значения; два столбца считаются построчно.