Open in Colab


Подписка на онлайн-обучение telegram

Pandas за 10 минут

Это короткое введение в мир pandas, ориентированное в основном на новых пользователей. Более сложные рецепты можно найти в Поваренной книге.

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

Создание объекта

Подробнее см. Введение в структуры данных pandas

Создание Серии (Series) путем передачи питоновского списка позволет pandas создать целочисленный индекс по умолчанию:

Создание Кадра данных (DataFrame) путем передачи массива NumPy с временнЫм индексом и помеченными столбцами:

Создать DataFrame можно путем передачи питоновского словаря объектов, которые можно преобразовать в серию.

Столбцы итогового DataFrame имеют разные типы данных.

Если вы используете IPython или Jupyter (Lab) Notebook (Colab), то по нажатию TAB после точки отобразятся публичные атрибуты объекта (в данном случае DataFrame):

Просмотр данных

Подробнее см. Документацию по базовой функциональности.

Просмотрим верхние и нижние строки полученного кадра данных:

Отобразим индекс и столбцы:

Метод DataFrame.to_numpy() представляет данные в виде массива NumPy, на котором строится DataFrame.

Обратите внимание, что эта операция может занять много времени, если ваш DataFrame имеет столбцы с разными типами данных, что сводится к фундаментальному различию между pandas и NumPy: массивы NumPy имеют один тип данных для всего массива, тогда как DataFrames в pandas имеет один тип данных для каждого столбца. Когда вы вызываете DataFrame.to_numpy(), pandas определит тип данных NumPy, который может содержать все типы данных DataFrame. Этот тип данных может в конечном итоге оказаться объектом (object, т.е. строкой), что потребует приведения каждого значения к объекту Python.

Наш DataFrame содержит значения с плавающей точкой, поэтому DataFrame.to_numpy() сработает быстро и не требует копирования данных.

Для df2, который содержит несколько типов данных, вызов DataFrame.to_numpy() является относительно дорогостоящим:

Обратите внимание, что DataFrame.to_numpy() не включает в вывод метки индекса или столбцов.

Метод describe() показывает краткую статистическую сводку для данных:

Транспонируем данные:

Сортировка по столбцам, см. sort_index():

Сортировка по значениям, см. sort_values():

Выбор

Рекомендуем использовать оптимизированные методы pandas для доступа к данным: .at, .iat, .loc и .iloc.

Подробнее см. Документацию по индексированию и выбору данных и Мультииндексу.

Получение

Выбор столбца, который возвращает Series, эквивалентно df.A:

Выбор с помощью [ ], вырезает строки:

Выбор по метке

Подробнее см. в Документации

Для получения строки с помощью метки:

Выбор по нескольким осям:

При отображении срезов меток включаются обе конечные точки:

Уменьшение размерности возвращаемого объекта:

Для получения скалярного значения:

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

Выбор по позиции

Подробнее см. в Документации

Выбор позиции с помощью целых чисел:

По целочисленным срезам, действующим аналогично NumPy / Python, т.е. правое граничное значение не включается:

По спискам целочисленных позиций, аналогично стилю NumPy / Python:

Для явного создания среза строк:

Для явного создания среза столбцов:

Для явного получения значений:

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

Булево индексирование

Использование значений одного столбца для выбора данных:

Выбор значений из DataFrame, для которых выполняется логическое условие:

Использование метода isin() для фильтрации:

Установка значений

При добавлении нового столбца данные автоматически выравниваются по индексам:

Установка значений по метке:

Установка значений путем присвоения массива NumPy:

Операция where с помощью присвоения:

Отсутствующие данные

pandas в основном использует значение np.nan для представления отсутствующих данных. По умолчанию они не включается в вычисления, см. подробнее в Документации

Повторное индексирование позволяет изменить/добавить/удалить индекс по указанной оси. Метод возвращает копию данных.

Чтобы удалить строки, в которых отсутствуют данные, см. dropna():

Заполнение недостающих данных:

Чтобы получить логическую маску, в которой значениями являются nan.

Операции

См. в Документации

Статистика

Операции в целом исключают пропущенные данные.

Выполнение описательной статистики:

Та же операция на другой оси:

Операции с объектами разной размерности требуют выравнивания. pandas автоматически транслируют по указанному измерению.

Apply

Применение функций к данным:

Гистограмма

Подробнее см. в Документации

Строковые методы

Series оснащен набором методов в атрибуте str для обработки строк, которые упрощают работу с каждым элементом массива. Обратите внимание, что сопоставление с образцом (pattern-matching) в str обычно использует регулярные выражения по умолчанию (а в некоторых случаях всегда использует их), см. в Документации.

Объединение (Merge)

Concat

pandas предоставляет различные средства для простого объединения объектов Series и DataFrame с различными видами логики множеств для индексов и функциональности реляционной алгебры в случае операций типа соединения (join) / слияния (merge), см. в Документации.

Объединение объектов pandas вместе с помощью concat():

Добавление столбца в DataFrame выполняется относительно быстро. Однако для добавления строки требуется создание копии, и это может стать трудозтратной операцией. Рекомендуем передавать предварительно созданный список записей в конструктор DataFrame вместо создания DataFrame путем итеративного добавления к нему записей. Подробнее см. в Документации.

Присоединение (Join)

Слияние в стиле SQL, см. в Документации.

Другой пример, который можно привести:

Группировка

Под группировкой ("group by") понимаем процесс, включающий один или несколько следующих шагов:

Подробнее см. в Документации

Группировка, а затем применение функции sum() к полученным группам.

Группировка по нескольким столбцам образует иерархический (мультииндекс) индекс, и мы снова можем применить функцию sum().

Изменение формы

См. Документацию про иерархическую индексацию и изменение формы.

Stack

Метод stack() "сжимает" уровень в столбцах DataFrame.

С "уложенными" ("stacked") DataFrame или Series (имеющими MultiIndex в качестве индекса) обратная операция - unstack(), которая по умолчанию распаковывает последний уровень:

Сводные таблицы (Pivot tables)

См. секцию Документации

Мы можем очень легко создать сводные таблицы из этих данных:

Временные ряды

pandas имеет простые, мощные и эффективные функции для выполнения операций передискретизации во время преобразования частоты (например, преобразование секундных данных в 5-минутные данные). См. документацию по временным рядам.

Представление часового пояса:

Преобразование в другой часовой пояс:

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

Преобразование между периодом и меткой времени позволяет использовать некоторые удобные арифметические функции. В следующем примере мы преобразуем ежеквартальную частоту с годом, заканчивающимся в ноябре, в 9 утра конца месяца, следующего за концом квартала:

Категории

pandas могут включать категориальные данные в DataFrame, см. введение в категории и документацию по API.

Преобразуйте необработанные оценки в категориальный тип данных.

Переименуйте категории в более выразительные имена (присвоение Series.cat.categories() на месте!)

Сортировка осуществляется по категориям, а не в лексическом порядке.

При группировке по столбцу категорий также отображаются пустые категории.

Plotting

Подробнее в Документации

Используем стандартное соглашение для ссылки на API matplotlib:

В DataFrame метод plot() удобен для построения всех столбцов с метками:

Получение и записаь данных

CSV

см. про запись в csv файлы

см. про чтенеи csv файлов

HDF5

см. про чтение и запись в HDFStores

Запись в HDF5 хранилище:

Чтение из HDF5 хранилища:

Excel

см. про чтение и запись в MS Excel

Запись в excel файл:

Чтение из excel файла:

Подсказки (Gotchas)

Если пытаетесь выполнить операцию, то можете увидеть исключение, например:

Для объяснения см. "Сравнения".

См. также "Подсказки".

Дополнительно:

Подписка на онлайн-обучение telegram