pandas python что это такое
Введение в pandas: анализ данных на Python
pandas это высокоуровневая Python библиотека для анализа данных. Почему я её называю высокоуровневой, потому что построена она поверх более низкоуровневой библиотеки NumPy (написана на Си), что является большим плюсом в производительности. В экосистеме Python, pandas является наиболее продвинутой и быстроразвивающейся библиотекой для обработки и анализа данных. В своей работе мне приходится пользоваться ею практически каждый день, поэтому я пишу эту краткую заметку для того, чтобы в будущем ссылаться к ней, если вдруг что-то забуду. Также надеюсь, что читателям блога заметка поможет в решении их собственных задач с помощью pandas, и послужит небольшим введением в возможности этой библиотеки.
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 или «на лету»:
Доступ к строкам по индексу возможен несколькими способами:
Можно делать выборку по индексу и интересующим колонкам:
Фильтровать DataFrame с помощью т.н. булевых массивов:
Кстати, к столбцам можно обращаться, используя атрибут или нотацию словарей Python, т.е. df.population и df[‘population’] это одно и то же.
Сбросить индексы можно вот так:
pandas при операциях над DataFrame, возвращает новый объект DataFrame.
Добавим новый столбец, в котором население (в миллионах) поделим на площадь страны, получив тем самым плотность:
Не нравится новый столбец? Не проблема, удалим его:
Особо ленивые могут просто написать del df[‘density’].
Переименовывать столбцы нужно через метод rename:
В этом примере перед тем как переименовать столбец Country Code, убедитесь, что с него сброшен индекс, иначе не будет никакого эффекта.
Чтение и запись данных
pandas поддерживает все самые популярные форматы хранения данных: csv, excel, sql, буфер обмена, html и многое другое:
Чаще всего приходится работать с csv-файлами. Например, чтобы сохранить наш DataFrame со странами, достаточно написать:
Функции to_csv ещё передаются различные аргументы (например, символ разделителя между колонками) о которых подробнее можно узнать в официальной документации.
Считать данные из csv-файла и превратить в DataFrame можно функцией read_csv.
Аргумент sep указывает разделитесь столбцов. Существует ещё масса способов сформировать DataFrame из различных источников, но наиболее часто используют CSV, Excel и SQL. Например, с помощью функции read_sql, pandas может выполнить SQL запрос и на основе ответа от базы данных сформировать необходимый DataFrame. За более подробной информацией стоит обратиться к официальной документации.
Группировка и агрегирование в pandas
Необходимо подсчитать, сколько женщин и мужчин выжило, а сколько нет. В этом нам поможет метод .groupby.
А теперь проанализируем в разрезе класса кабины:
Сводные таблицы в pandas
В качестве индекса теперь у нас будет пол человека, колонками станут значения из PClass, функцией агрегирования будет count (подсчёт количества записей) по колонке Name.
Анализ временных рядов
В pandas очень удобно анализировать временные ряды. В качестве показательного примера я буду использовать цену на акции корпорации Apple за 5 лет по дням. Файл с данными можно скачать тут.
Здесь мы формируем DataFrame с DatetimeIndex по колонке Date и сортируем новый индекс в правильном порядке для работы с выборками. Если колонка имеет формат даты и времени отличный от ISO8601, то для правильного перевода строки в нужный тип, можно использовать метод pandas.to_datetime.
Давайте теперь узнаем среднюю цену акции (mean) на закрытии (Close):
А если взять промежуток с февраля 2012 по февраль 2015 и посчитать среднее:
А что если нам нужно узнать среднюю цену закрытия по неделям?!
Resampling мощный инструмент при работе с временными рядами (time series), помогающий переформировать выборку так, как удобно вам. Метод resample первым аргументом принимает строку rule. Все доступные значения можно найти в документации.
Визуализация данных в pandas
Для визуального анализа данных, pandas использует библиотеку matplotlib. Продемонстрирую простейший способ визуализации в pandas на примере с акциями Apple.
Берём цену закрытия в промежутке между 2012 и 2017.
И видим вот такую картину:
По оси X, если не задано явно, всегда будет индекс. По оси Y в нашем случае цена закрытия. Если внимательно посмотреть, то в 2014 году цена на акцию резко упала, это событие было связано с тем, что Apple проводила сплит 7 к 1. Так мало кода и уже более-менее наглядный анализ 😉
Эта заметка демонстрирует лишь малую часть возможностей pandas. Со своей стороны я постараюсь по мере своих сил обновлять и дополнять её.
Полезные ссылки
💌 Присоединяйтесь к рассылке
Понравился контент? Пожалуйста, подпишись на рассылку.
Pandas — обработка и анализ данных в 2021 году
Подробный обзор библиотеки Pandas. Гибкая и мощная библиотека для анализа и обработки данных, разработанная на языке программирования Python.
Введение
Для того чтобы эффективно работать с этой библиотекой, нужно понять основные структуры данных. Пусть вас это не пугает, их всего две и разобраться с ними проще простого.
Series — это структура данных принципиально похожая на список и словарь в Python. Используется в качестве столбцов в таблице.
DataFrame — если говорить простыми словами, то эта структура данных представляет из себя обычную таблицу. Иными словами табличная структура данных. Как и во всех таблицах она состоит из строк и столбцов. Столбцами выступают объекты Series, а строки его элементы.
Установка
Pandas как и все библиотеки в Python устанавливаются стандартным методом через пакетный менеджер pip.
Использование
Чтобы показать библиотеку в работе, нам нужны какие нибудь статистические данные, для примера давайте возьмем данные ВВП 5 разных стран по версии всемирного банка и попробуем сформировать из них таблицу. Передавать данных в DataFrame мы будем используя знакомый синтаксис словаря Python.
Объект DataFrame имеет два индекса по столбцам и строкам. Если индекс по строкам не указан вручную, то pandas задает его автоматически.
Индексы
Назначать индексы объекту DataFrame можно при его создании или в процессе работы с ним.
Вызывая метод DataFrame мы передали ему аргумент index со списком именованных индексов.
Фильтрация данных
Pandas позволяет производить фильтрацию вывода по индексам и столбцам. Так же можно комбинировать индексы и колонки, использовать слайсы и логические выражения.
По столбцу
Обращение к столбцам в pandas реализовано стандартным образом, так как будто вы обращаетесь к ключу словаря, или же к методу объекта. В моем случае обращение как к методу объекта невозможно, я выбрал кириллическое название столбца, а работает только с латиницей 🙂
По строковому индексу
Для обращения к строковым индекса существуют два метода
Обращение к именованному индексу RU
Обращение к числовому индексу
По срезами
Объект DataFrame поддерживает использование срезов.
Отобразим все строки начиная с 3.
С использованием условий
Мы так же можем использовать логику в фильтрации данных. Давайте отобразить странны, в которых ВВП на душу населения в 2018 году был больше 100$
Работа с столбцами
Вы можете создавать, удалять и переименовывать ваши столбцы в любой момент времени.
Давайте рассмотрим каждый момент по внимательнее.
Переименование
Для переименования столбца существует метод rename
Давайте переименуем наши столбцы с указанием года.
Метод rename на вход принимает обычный словарь, ключ который является текущем названием столбца, а значение — новым. За один раз мы можем переименовать сколько угодно столбцов, главное не забывайте разделять элементы словаря запятой.
Важно: результат выполнение метода rename возвращает новый измененный объект DataFrame, поэтому переназначь основной экземпляр DataFrame.
Создание
Создадим новую колонку «Рост» и наполним ее значениями высчитанными из разницы 2018 к 2017 году.
В этой ситуации объект изменяется и переназначать экземпляр нам не нужно.
Удаление
Для удаления столбца существует метод drop, так же необходимо передать в аргумент axis значение index или columns.
Важно: результат выполнение метода drop возвращает новый измененный объект DataFrame, поэтому не забудьте переназначить DataFrame.
Загрузка данных
API загрузки данных имеет поддержку множество структурированных форматов. Для примера возьмем информацию из реестра специалистов в области ветеринарии, занимающихся предпринимательской деятельностью на территории Санкт-Петербурга. На сайте есть ссылочка для скачивания таблиц в формате CSV и MS Excel эти два формата мы и рассмотрим.
Из таблицы CSV
Осуществить загрузку данных в таблицу можно используя метод read_csv
Из таблицы MS Excel
За загрузку данных из excel таблицы отвечает метод read_excel
Установка библиотеки xlrd
Для загрузки данных из таблицы MS Excel необходимо установить дополнительную библиотеку xlrd
Загрузка данных
После установки необходимых зависимостей мы можем приступать к загрузке данных.
Список всех поддерживаемых форматов
Pandas поддерживает огромное количество форматов импорта данных, приведу полный список из официальной документации
Тип данных | Формат данных | Используемый метод |
---|---|---|
Текстовый | CSV | read_csv |
Текстовый | Fixed-Width Text File | read_fwf |
Текстовый | JSON | read_json |
Текстовый | HTML | read_html |
Текстовый | Буфер обмена | read_clipboard |
Бинарный | MS Excel | read_excel |
Бинарный | OpenDocument | read_excel |
Бинарный | HDF5 Format | read_hdf |
Бинарный | Feather Format | read_feather |
Бинарный | Parquet Format | read_parquet |
Бинарный | ORC Format | read_orc |
Бинарный | Msgpack | read_msgpack |
Бинарный | Stata | read_stata |
Бинарный | SAS | read_sas |
Бинарный | SPSS | read_spss |
Бинарный | Python Pickle Format | read_pickle |
SQL | SQL | read_sql |
SQL | Google BigQuery | read_gbq |
Сохранение данных
Так же как и в импорте API поддерживает множество форматов для экспорта данных. Воспользуемся данными о ВВП для демонстрации работы.
В таблицу CSV
За запись данных в таблицу CSV отвечает метод to_csv
так выглядят наши экспортированные данные
В таблицу MS Excel
За запись данных в таблицу MS Excel отвечает метод to_excel
Установка библиотеки openpyxl
Для записи в таблицу нам понадобиться установить библиотеку openpyxl
Сохранение данных
Запускаем наш скрипт
На выходе получаем такую таблицу
Список всех поддерживаемых форматов
К сожалению, pandas не в полном объеме поддерживает запись во все форматы, которые он умеет читать, но с большинством из них нет никаких проблем.
Тип данных | Формат данных | Используемый метод |
---|---|---|
Текстовый | CSV | to_csv |
Текстовый | JSON | to_json |
Текстовый | HTML | to_html |
Текстовый | Буфер обмена | to_clipboard |
Бинарный | MS Excel | to_excel |
Бинарный | HDF5 Format | to_hdf |
Бинарный | Feather Format | to_feather |
Бинарный | Parquet Format | to_parquet |
Бинарный | Msgpack | to_msgpack |
Бинарный | Stata | to_stata |
Бинарный | Python Pickle Format | to_pickle |
SQL | SQL | to_sql |
SQL | Google BigQuery | to_gbq |
Визуализация данных
Визуализация это большая часть работы в анализе и обработке данных. Не будем сильно углубляться и рассмотрим простой пример визуализации наших данных.
Установка библиотеки matplotlib
Для рисования графиков нам понадобится эта библиотека
Создание графиков
Самый просто способ сгенерировать график, это передать обработчику данные для одной из координат, для второй он возьмет информацию из индекса.
После выполнения программы мы увидим вот такой график
Можно повторить тоже самое но только для 2018 года
Объединение данных на одном графике
У нас есть отдельный график для 2017 и 2018 года, но как их объединить в одной диаграмме? Очень просто, нужно использовать метод pivot из библиотеки pandas.
Заключение
На это обзор библиотеки pandas подошел к концу, если у вас возникли вопросы, не стесняйтесь задавать их в комментариях.
Аналитикам: большая шпаргалка по Pandas
Привет. Я задумывал эту заметку для студентов курса Digital Rockstar, на котором мы учим маркетологов автоматизировать свою работу с помощью программирования, но решил поделиться шпаргалкой по Pandas со всеми. Я ожидаю, что читатель умеет писать код на Python хотя бы на минимальном уровне, знает, что такое списки, словари, циклы и функции.
Что такое Pandas и зачем он нужен
Pandas — это библиотека для работы с данными на Python. Она упрощает жизнь аналитикам: где раньше использовалось 10 строк кода теперь хватит одной.
Например, чтобы прочитать данные из csv, в стандартном Python надо сначала решить, как хранить данные, затем открыть файл, прочитать его построчно, отделить значения друг от друга и очистить данные от специальных символов.
В Pandas всё проще. Во-первых, не нужно думать, как будут храниться данные — они лежат в датафрейме. Во-вторых, достаточно написать одну команду:
Pandas добавляет в Python новые структуры данных — серии и датафреймы. Расскажу, что это такое.
Структуры данных: серии и датафреймы
Серии — одномерные массивы данных. Они очень похожи на списки, но отличаются по поведению — например, операции применяются к списку целиком, а в сериях — поэлементно.
То есть, если список умножить на 2, получите тот же список, повторенный 2 раза.
А если умножить серию, ее длина не изменится, а вот элементы удвоятся.
Обратите внимание на первый столбик вывода. Это индекс, в котором хранятся адреса каждого элемента серии. Каждый элемент потом можно получать, обратившись по нужному адресу.
Еще одно отличие серий от списков — в качестве индексов можно использовать произвольные значения, это делает данные нагляднее. Представим, что мы анализируем помесячные продажи. Используем в качестве индексов названия месяцев, значениями будет выручка:
Теперь можем получать значения каждого месяца:
Так как серии — одномерный массив данных, в них удобно хранить измерения по одному. На практике удобнее группировать данные вместе. Например, если мы анализируем помесячные продажи, полезно видеть не только выручку, но и количество проданных товаров, количество новых клиентов и средний чек. Для этого отлично подходят датафреймы.
Датафреймы — это таблицы. У их есть строки, колонки и ячейки.
Технически, колонки датафреймов — это серии. Поскольку в колонках обычно описывают одни и те же объекты, то все колонки делят один и тот же индекс:
Объясню, как создавать датафреймы и загружать в них данные.
Создаем датафреймы и загружаем данные
Бывает, что мы не знаем, что собой представляют данные, и не можем задать структуру заранее. Тогда удобно создать пустой датафрейм и позже наполнить его данными.
А иногда данные уже есть, но хранятся в переменной из стандартного Python, например, в словаре. Чтобы получить датафрейм, эту переменную передаем в ту же команду:
Случается, что в некоторых записях не хватает данных. Например, посмотрите на список goods_sold — в нём продажи, разбитые по товарным категориям. За первый месяц мы продали машины, компьютеры и программное обеспечение. Во втором машин нет, зато появились велосипеды, а в третьем снова появились машины, но велосипеды исчезли:
Если загрузить данные в датафрейм, Pandas создаст колонки для всех товарных категорий и, где это возможно, заполнит их данными:
Обратите внимание, продажи велосипедов в первом и третьем месяце равны NaN — расшифровывается как Not a Number. Так Pandas помечает отсутствующие значения.
Теперь разберем, как загружать данные из файлов. Чаще всего данные хранятся в экселевских таблицах или csv-, tsv- файлах.
Файлы формата csv и tsv — это текстовые файлы, в которых данные отделены друг от друга запятыми или табуляцией:
После загрузки данных в датафрейм, хорошо бы их исследовать — особенно, если они вам незнакомы.
Исследуем загруженные данные
В датафрейме 5009 строк и 5 колонок.
Теперь видим, что в таблице есть дата заказа, метод доставки, номер клиента и выручка.
Тип object — это текст, float64 — это дробное число типа 3,14.
Ожидаемо, в индексе датафрейма номера заказов: 100762, 100860 и так далее.
Получив первое представление о датафреймах, теперь обсудим, как доставать из него данные.
Получаем данные из датафреймов
Данные из датафреймов можно получать по-разному: указав номера колонок и строк, использовав условные операторы или язык запросов. Расскажу подробнее о каждом способе.
Указываем нужные строки и колонки
Обратите внимание, результат команды — новый датафрейм с таким же индексом.
Можно фильтровать датафреймы по колонкам и столбцам одновременно:
Часто вы не знаете заранее номеров заказов, которые вам нужны. Например, если задача — получить заказы, стоимостью более 1000 рублей. Эту задачу удобно решать с помощью условных операторов.
Если — то. Условные операторы
Задача: нужно узнать, откуда приходят самые большие заказы. Начнем с того, что достанем все покупки стоимостью более 1000 долларов:
Интересно, сколько дорогих заказов было доставлено первым классом? Добавим в фильтр ещё одно условие:
Язык запросов
Разобравшись, как получать куски данных из датафрейма, перейдем к тому, как считать агрегированные метрики: количество заказов, суммарную выручку, средний чек, конверсию.
Считаем производные метрики
Другое дело. Теперь видим сумму выручки по каждому классу доставки. По суммарной выручке неясно, становится лучше или хуже. Добавим разбивку по датам заказа:
Ого, получается, что это так прыгает средний чек. Интересно, а какой был самый удачный день? Чтобы узнать, отсортируем получившийся датафрейм: выведем 10 самых денежных дней по выручке:
Команда разрослась, и её теперь неудобно читать. Чтобы упростить, можно разбить её на несколько строк. В конце каждой строки ставим обратный слеш \ :
В самый удачный день — 18 марта 2014 года — магазин заработал 27 тысяч долларов с помощью стандартного класса доставки. Интересно, откуда были клиенты, сделавшие эти заказы? Чтобы узнать, надо объединить данные о заказах с данными о клиентах.
Объединяем несколько датафреймов
До сих пор мы смотрели только на таблицу с заказами. Но ведь у нас есть еще данные о клиентах интернет-магазина. Загрузим их в переменную customers и посмотрим, что они собой представляют:
Решаем задачу
Закрепим полученный материал, решив задачу. Найдем 5 городов, принесших самую большую выручку в 2016 году.
Для начала отфильтруем заказы из 2016 года:
Город — это атрибут пользователей, а не заказов. Добавим информацию о пользователях:
Cруппируем получившийся датафрейм по городам и посчитаем выручку:
Отсортируем по убыванию продаж и оставим топ-5:
Возьмите данные о заказах и покупателях и посчитайте:
Через некоторое время выложу ответы в Телеграме. Подписывайтесь, чтобы не пропустить ответы и новые статьи.
Кстати, большое спасибо Александру Марфицину за то, что помог отредактировать статью.
Документация по модулю Python Pandas
Модуль Python Pandas представляет собой модуль с открытым исходным кодом. Он имеет широкую сферу применения в области вычислений, анализа данных, статистики и т. д.
Начало работы
Прежде чем разобраться в функциях модуля Pandas, нам необходимо установить модуль (проверка совместимости версии Python с версией модуля, который вы хотите установить, с помощью официальной документации модуля Pandas).
Есть разные способы установить модуль Python Pandas. Один из самых простых способов — установить с помощью установщика пакетов Python, то есть PIP.
Введите следующую команду в командной строке:
pip install pandas
Чтобы добавить модуль Pandas и NumPy в ваш код, нам необходимо импортировать эти модули в наш код.
Pandas — структуры данных
Pandas работает со следующими структурами данных:
Эти структуры данных быстрее по сравнению с массивами NumPy.
1 Серия
Pandas Series — это одномерная структура, напоминающая массивы, содержащие однородные данные. Это линейная структура данных, в которой элементы хранятся в одном измерении.
Примечание. Размер структуры данных серии в Pandas является неизменным, т.е. однажды установленный, он не может быть изменен динамически. При этом значения и элементы в серии можно изменять.
Синтаксис:
pandas.Series(input_data, index, data_type, copy)
В приведенном выше фрагменте кода мы предоставили ввод с использованием массивов NumPy и установили значения индекса для входных данных.
Выход:
10 John
11 Bran
12 Sam
13 Peter
dtype: object
2 DataFrame
Модуль Python Pandas предоставляет DataFrame, который представляет собой двумерную структуру, напоминающую двумерные массивы. Здесь входные данные оформляются в виде строк и столбцов.
Примечание. Размер структуры данных DataFrame в Pandas можно изменять.
Синтаксис:
pandas.DataFrame(input_data, index_value, columns, data_type, copy)
В приведенном выше коде мы предоставили ввод с помощью списков, добавили метки: «Имя» и «Город» к столбцам и установили для них значения индекса.
Выход:
Name City
1 John Pune
2 Bran Mumbai
3 Peter Delhi
3 Panel
Модуль Python Pandas предлагает панель, которая представляет собой трехмерную структуру данных и содержит 3 оси для выполнения следующих функций:
Синтаксис:
pandas.Panel(input_data, items, major_axis, minor_axis, data_type, copy)
Импорт данных из файла CSV в DataFrame
Модуль DataFrame Python Pandas также может быть построен с использованием файлов CSV. Файл CSV — это в основном текстовый файл, в котором хранятся данные для каждой строки. Элементы разделяются запятой.
Метод read_csv (file_name) используется для чтения данных из файла CSV в DataFrame.
Синтаксис:
pandas.read_csv()
Пример:
Выход:
Name Age
0 John 21
1 Bran 22
Статистический анализ в Pandas
Модуль Python Pandas предлагает большое количество встроенных методов, помогающих пользователям проводить статистический анализ данных.
Ниже приводится список некоторых наиболее часто используемых функций для статистического анализа:
Метод | Description |
---|---|
count() | Подсчитывает количество всех непустых наблюдений |
sum() | Возвращает сумму элементов данных. |
mean() | Возвращает среднее значение всех элементов данных. |
median() | Возвращает медианное значение всех элементов данных. |
mode() | Возвращает режим всех элементов данных |
std() | Возвращает стандартное отклонение всех элементов данных. |
min() | Возвращает минимальный элемент данных среди всех входных элементов. |
max() | Возвращает максимальный элемент данных среди всех входных элементов. |
abs() | Возвращает абсолютное значение. |
prod() | Возвращает произведение значений данных. |
cumsum() | Возвращает кумулятивную сумму значений данных. |
cumprod() | Возвращает совокупное произведение значений данных. |
describe() | Он отображает статистическую сводку всех записей за один снимок, т.е. (сумма, количество, мин, среднее и т. Д.) |
Для начала давайте создадим DataFrame, который мы будем использовать в этом разделе для понимания различных функций, предоставляемых для статистического анализа.
Функция sum()
Как видно выше, функция sum() добавляет данные каждого столбца отдельно и добавляет строковые значения везде, где они есть.
функция mean()
Выход:
Marks 59.8
Roll_num 3.0
dtype: float64
Функция mean не будет воздействовать на строки, найденные в данных, в отличие от функции sum().