Pandasначало работы с пандами

Корреляция цен

books.ru labirint.ru ozon.ru my-shop.ru read.ru bookvoed.ru book-stock.ru setbook.ru
books.ru 1.000000 0.971108 0.969906 0.965291 0.978453 0.970747 0.965809 0.966226
labirint.ru 0.971108 1.000000 0.973731 0.968637 0.979923 0.970600 0.969971 0.965970
ozon.ru 0.969906 0.973731 1.000000 0.973783 0.979620 0.967151 0.974792 0.971946
my-shop.ru 0.965291 0.968637 0.973783 1.000000 0.976491 0.956980 0.996946 0.970588
read.ru 0.978453 0.979923 0.979620 0.976491 1.000000 0.974892 0.976164 0.974129
bookvoed.ru 0.970747 0.970600 0.967151 0.956980 0.974892 1.000000 0.958787 0.961217
book-stock.ru 0.965809 0.969971 0.974792 0.996946 0.976164 0.958787 1.000000 0.972701
setbook.ru 0.966226 0.965970 0.971946 0.970588 0.974129 0.961217 0.972701 1.000000

Выбираем магазины для анализа

isbn dmkpress.com rufanbook.ru read.ru setbook.ru moymir.ru boffo.ru my-shop.ru
1 9785994911389 NaN NaN 69 100 NaN NaN NaN
2 9789855497791 NaN NaN NaN 310 NaN NaN 403
3 9785942802943 NaN NaN NaN NaN NaN NaN NaN
4 9785779717533 NaN NaN 177 160 NaN NaN 177
магазин          кол-во книг
ozon.ru          220962
setbook.ru       208039
my-shop.ru       203200
books.ru         181817
book-stock.ru    124308
bookvoed.ru      117494
labirint.ru      114803
read.ru          93720
spbdk.ru         43714
chaconne.ru      42993
biblion.ru       41898
eksmo.ru         40582
knigosvet.com    34645
rufanbook.ru     6071
combook.ru       4716
bookmail.ru      2356
boffo.ru         2341
moymir.ru        740
dmkpress.com     722
books.ru labirint.ru ozon.ru my-shop.ru read.ru bookvoed.ru book-stock.ru setbook.ru
count 17834.000000 17834.000000 17834.000000 17834.000000 17834.000000 17834.000000 17834.000000 17834.000000
mean 340.154312 343.349333 308.639677 294.602108 309.796400 315.771504 291.266794 286.433722
std 189.347516 235.526318 209.594445 206.383899 208.093532 208.651959 204.553104 191.038253
min 40.000000 17.000000 26.000000 14.000000 69.000000 13.000000 14.000000 77.000000
25% 210.000000 169.250000 153.000000 142.000000 155.000000 162.000000 142.000000 140.000000
50% 308.000000 293.500000 264.000000 248.000000 267.000000 271.000000 248.000000 240.000000
75% 429.000000 435.000000 391.000000 380.750000 391.000000 402.000000 373.000000 360.000000
max 1460.000000 1497.000000 1478.000000 1474.000000 1485.000000 1456.000000 1474.000000 1490.000000
  • mean — среднее
  • std — стандартное отклонение
  • 50%, 25% и 75% — медианы среднего, нижнего и верхнего кванитилей

DataFrame и Series

Чтобы эффективно работать с pandas, необходимо освоить самые главные структуры данных библиотеки: DataFrame и Series. Без понимания что они из себя представляют, невозможно в дальнейшем проводить качественный анализ.

Series

Структура/объект Series представляет из себя объект, похожий на одномерный массив (питоновский список, например), но отличительной его чертой является наличие ассоциированных меток, т.н. индексов, вдоль каждого элемента из списка. Такая особенность превращает его в ассоциативный массив или словарь в Python.

В строковом представлении объекта Series, индекс находится слева, а сам элемент справа. Если индекс явно не задан, то pandas автоматически создаёт RangeIndex от 0 до N-1, где N общее количество элементов. Также стоит обратить, что у Series есть тип хранимых элементов, в нашем случае это int64, т.к. мы передали целочисленные значения.

У объекта Series есть атрибуты через которые можно получить список элементов и индексы, это values и index соответственно.

Доступ к элементам объекта Series возможны по их индексу (вспоминается аналогия со словарем и доступом по ключу).

Индексы можно задавать явно:

Делать выборку по нескольким индексам и осуществлять групповое присваивание:

Фильтровать Series как душе заблагорассудится, а также применять математические операции и многое другое:

Если Series напоминает нам словарь, где ключом является индекс, а значением сам элемент, то можно сделать так:

У объекта Series и его индекса есть атрибут name, задающий имя объекту и индексу соответственно.

Индекс можно поменять «на лету», присвоив список атрибуту index объекта Series

Имейте в виду, что список с индексами по длине должен совпадать с количеством элементов в Series.

DataFrame

Объект DataFrame лучше всего представлять себе в виде обычной таблицы и это правильно, ведь DataFrame является табличной структурой данных. В любой таблице всегда присутствуют строки и столбцы. Столбцами в объекте DataFrame выступают объекты Series, строки которых являются их непосредственными элементами.

DataFrame проще всего сконструировать на примере питоновского словаря:

Чтобы убедиться, что столбец в DataFrame это Series, извлекаем любой:

Объект DataFrame имеет 2 индекса: по строкам и по столбцам. Если индекс по строкам явно не задан (например, колонка по которой нужно их строить), то pandas задаёт целочисленный индекс RangeIndex от 0 до N-1, где N это количество строк в таблице.

В таблице у нас 4 элемента от 0 до 3. 

Доступ по индексу в DataFrame

Индекс по строкам можно задать разными способами, например, при формировании самого объекта DataFrame или «на лету»:

Как видно, индексу было задано имя — Country Code. Отмечу, что объекты Series из DataFrame будут иметь те же индексы, что и объект DataFrame:

Доступ к строкам по индексу возможен несколькими способами:

  • .loc — используется для доступа по строковой метке
  • .iloc — используется для доступа по числовому значению (начиная от 0)

Можно делать выборку по индексу и интересующим колонкам:

Как можно заметить, .loc в квадратных скобках принимает 2 аргумента: интересующий индекс, в том числе поддерживается слайсинг и колонки.

Фильтровать DataFrame с помощью т.н. булевых массивов:

Кстати, к столбцам можно обращаться, используя атрибут или нотацию словарей Python, т.е. df.population и df это одно и то же.

Сбросить индексы можно вот так:

pandas при операциях над DataFrame, возвращает новый объект DataFrame.

Добавим новый столбец, в котором население (в миллионах) поделим на площадь страны, получив тем самым плотность:

Не нравится новый столбец? Не проблема, удалим его:

Особо ленивые могут просто написать del df.

Переименовывать столбцы нужно через метод rename:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *