- Обзор пакета¶
- Структуры данных¶
- Изменяемость и копирование данных¶
- Получение поддержки¶
- Управление проектом¶
- Команда разработчиков¶
- Лицензия¶
- Предшественники¶
- Учебные материалы¶
- Библиотека #
- Основные объекты #
- Особенности индексирования в #
- Где и для чего применяется Pandas
- Начало работы с Pandas
- Структуры хранения данных
- Операции чтения и записи данных
- Первичное исследование данных
- Индексирование
- Объединение данных
- Агрегация данных
- Групповые операции
- Работа с пропущенными данными
- Визуализация данных
- Работа с временными рядами
- В заключение
- Основная функциональность
- Переиндексация
- Удаление записей с оси
- Предупреждение
- Арифметические операции и выравнивание данных
- Арифметические методы с заполнением значений
- Операции между объектами DataFrame и Series
- Применение функций и отображение
- Сортировка и ранжирование
Обзор пакета¶
pandas — это пакет Python, предоставляющий быстрые, гибкие и выразительные структуры данных, предназначенные для того, чтобы сделать работу с «реляционными» или «размеченными» данными простой и интуитивно понятной. Он призван стать фундаментальным строительным блоком высокого уровня для практического анализа данных о реальном мире в Python. Кроме того, перед ним стоит более широкая цель — стать самым мощным и гибким инструментом анализа и манипулирования данными с открытым исходным кодом, доступным на любом языке. Он уже на пути к этой цели.
pandas хорошо подходит для разных типов данных:
Две основные структуры данных pandas, (одномерная) и (двумерная), обрабатывают подавляющее большинство типичных случаев использования в финансах, статистике, социальных науках и многих других областях. Для пользователей R: в pandas предоставляет все, что и в R, и даже больше. pandas построен на основе NumPy и предназначен для интеграции в среде научных вычислений со многими другими сторонними библиотеками.
Вот кое-что из того, что pandas отлично удается:
Многие из этих принципов предназначены для устранения недостатков, часто возникающих при использовании других языков и сред научных исследований. Для специалистов по данным работа с данными обычно делится на несколько этапов: обработка и очистка данных, их анализ и моделирование, а затем организация результатов анализа в форме, подходящей для построения графика или табличного отображения. pandas — идеальный инструмент для всех этих задач.
Структуры данных¶
Лучше всего представлять структуры данных pandas как гибкие контейнеры для данных меньшей мерности. Например, DataFrame — это контейнер для Series, а Series — это контейнер для скаляров. Хотелось бы иметь возможность вставлять и удалять объекты из этих контейнеров как при работе со словарем.
Кроме того, хотелось бы, чтобы общие функции API по умолчанию учитывали бы типичную ориентацию временных рядов и наборов перекрестных данных. При использовании N-мерного массива (ndarrays) для хранения 2- и 3-мерных данных на пользователя ложится задача при написании функций учитывать ориентацию набора данных; оси считаются более или менее эквивалентными (за исключением случаев, когда непрерывность C или Fortran значима для производительности). В pandas оси предназначены для придания данным большего семантического значения, то есть для конкретного набора данных, скорее всего, будет существовать «правильный» способ ориентации данных. Таким образом, цель состоит в том, чтобы уменьшить количество умственных усилий, необходимых, чтобы кодировать преобразования данных в нижележащих функциях.
Например, с табличными данными (DataFrame) семантически более полезно думать об индексе (строках) и столбцах, а не о оси 0 и оси 1. Итерация по столбцам DataFrame таким образом приводит к более читаемому коду:
# do something with series
Изменяемость и копирование данных¶
Все структуры данных pandas изменяются по значению (значения, которые они содержат, могут быть изменены), но не всегда изменяются по размеру. Длина Series не может быть изменена, а вот столбцы в DataFrame вставить можно. Однако подавляющее большинство методов создают новые объекты и оставляют входные данные нетронутыми. В общем, нам нравится отдавать предпочтение неизменности там, где это разумно.
Получение поддержки¶
С проблемами и идеями относительно pandas в первую очередь следует обратиться в Github Issue Tracker. Если у вас есть общий вопрос, эксперты сообщества pandas могут ответить на Stack Overflow.
Управление проектом¶
Процесс управления, который проект pandas неофициально использовал с момента его создания в 2008 году, формализован в Project Governance documents. Эта документация поясняет, как принимаются решения и как взаимодействуют различные элементы нашего сообщества, включая отношения между совместной разработкой открытого исходного кода и работой, которая может финансироваться коммерческими или некоммерческими организациями.
Уэс МакКинни — наш Великодушный пожизненный диктатор (BDFL).
Команда разработчиков¶
Информацию о текущих институциональных партнерах можно найти на странице веб-сайта pandas.
Лицензия¶
pandas является частью дистрибутива Anaconda и может быть установлен вместе с Anaconda или Miniconda:
pandas можно установить через pip из PyPI.
Устанавливаете конкретную версию? Устанавливаете из исходников? Загляните на страницу расширенной установки.
pandas — подходящий инструмент для работы с табличными данными, такими как данные в электронных таблицах или базах данных. pandas поможет вам исследовать, очищать и обрабатывать ваши данные. В pandas таблица данных называется .
pandas поддерживает интеграцию со многими форматами файлов или источниками данных «из коробки» (csv, excel, sql, json, parquet и другими). Импорт данных из таких источников обеспечивается функцией с префиксом . Точно так же методы используются для сохранения данных.
Выбор или фильтрация определенных строк или столбцов? Фильтрация данных по условию? В pandas доступны методы для получения срезов, выбора и извлечения необходимых данных.
pandas обеспечивает построение диаграмм «из коробки», используя возможности Matplotlib. Вы можете выбрать тип диаграммы (точечная, гистограмма, диаграмма размаха и так далее), соответствующий вашим данным.
Для выполнения вычислений не нужно перебирать все строки таблицы. Манипуляции с данными в столбце работают поэлементно. Добавить столбец в на основе существующих данных в других столбцах очень просто.
Основные статистические показатели (среднее, медиана, минимум, максимум и прочее) легко поддаются вычислению. Стандартный либо пользовательский набор показателей можно получить для всего набора данных, скользящего окна данных или группировок по категориям. Последнее еще называют подходом «разделить-применить-объединить».
Изменяйте структуру таблицы данных несколькими способами. Функцией можно преобразовать таблицу данных из широкого в длинный (аккуратный) формат, а функцией — из длинного в широкий формат. Благодаря встроенным агрегирующим функциям сводная таблица создается с помощью одной команды.
Несколько таблиц можно объединить как по столбцам, так и по строкам, поскольку для объединения нескольких таблиц данных предусмотрены операции объединения, как в базах данных.
pandas отлично поддерживает временные ряды и имеет обширный набор инструментов для работы с датами, временем и с данными, индексированными по времени.
Наборы данных содержат не только числовые данные. pandas предоставляет широкий набор функций для очистки текстовых данных и извлечения из них полезной информации.
Предшественники¶
Знакомы ли вы с другим программным обеспечением для обработки табличных данных? Изучите операции, которые эквивалентны в pandas и в программном обеспечении, которое вы уже знаете:
Язык программирования предоставляет структуру данных и несколько пакетов, таких как , для удобной обработки данных, аналогично pandas.
Уже знакомы с , , и так далее? Большинство этих запросов к SQL имеют эквиваленты в pandas.
, включенный в пакет статистического программного обеспечения , соответствует в pandas. Многие операции из STATA имеют эквивалент в pandas.
Пользователи или других программ для работы с электронными таблицами обнаружат, что многие концепции можно перенести на pandas.
Набор статистического программного обеспечения также предоставляет , соответствующий в pandas. Кроме того, векторизованные операции SAS, фильтрация, операции обработки строк и многое другое имеют аналогичные функции в pandas.
Учебные материалы¶
Краткий обзор функциональности pandas см. в статье 10 Minutes to pandas.
Вы можете обратиться к шпаргалке по pandas, в ней в сжатом виде приведена информация об управлении данными в pandas.
Сообщество выпускает множество учебных пособий, доступных в Интернете. Некоторые материалы включены в список предоставленных сообществом (см. раздел Учебные материалы сообщества).
Библиотека #
pandas (panel data) — самая популярная библиотека для работы с таблицами в . — сторонняя библиотека, а значит требует дополнительной установки в общем случае, но входит в дистрибутив .
python -m pip install pandas
При импортировании часто пользуются псевдонимом .
Базовый туториал по работе с библиотекой от разработчиков можно найти здесь.
Удобную шпаргалку по можно найти здесь.
Основные объекты #
Своё название библиотека берет от английского термина panel data (панельные данные). Своим названием подсказывает то, как табличные данные представляются в ней. Дело в том, что в существует асимметрия относительно строк и столбцов: чтобы таблицы в работали эффективно, необходимо чтобы в столбцах этой таблицы были данные одинакового типа. В случае панельных данных, такой эффект достигается естественным образом, если поставить в соответствие каждой измеряемой величине столбец, а ось времени отложить вместе со строками.
В есть два основных типа объекта: — соответствует таблице, — соответствует одному столбцу таблицы, но может существовать и сам по себе.
DataFrame — двумерная структура данных, которая может хранить данные разных типов в столбцах.
Больше всего напоминает лист () из таблицы или таблицу. Объекты изменяемы, но с некоторыми ограничениями. Можно изменять значения в ячейках таблицы, добавлять новые столбцы на месте, но для добавления строк придется создать новый объект. Ниже приведен пример таблицы , созданной из словаря.
# Создание таблицы из словаря.
# Ключи словаря используются в качестве названий столбцов
# Значения используются в качестве содержимого таблицы
Каждый столбец — Series.
Код в ячейке ниже демонстрирует, что созданный ранее состоит из трех , каждый из которых соответствует одному из столбцов таблицы.
Тип данных может отличаться в разных столбцах объекта (таблицы), но должен быть одинаковым для всех значений объекта (столбца).
Объект может существовать и вне таблицы (). В целом он похож на одномерный , но имеет расширенный индекс. Ниже приводится пример создания из списка целых чисел, которому в качестве индекса присваиваются строки.
# Создание pd. Series из списка
# В качестве индекса указывается массив строк
Ivan 22
Alex 35
Jane 58
dtype: int64
Особенности индексирования в #
Главным отличием от массивов заключается в том, что объекты в индексированы специальным объектом pd.index. Благодаря этому таблицы и столбцы можно удобно и эффективно индексировать не только целочисленным смещением, как в , но и строковыми значениями, датами, временными рядами и любыми другими хэшируемыми объектами. В ячейке ниже приводится пример такого индексирования: первое значение 22 столбца имеет нулевое смещение от начала и записано под меткой , что позволяет получить это значение и по метке и по 0 индексу.
В этом отношении объекты похожи на словари, так как они позволяют быстрый доступ к данным по индексу (как бы ключу), но в отличие от словарей
Кроме этого такая индексация позволяет без особых усилий со стороны программиста выравнивать данные из разных источников. Чтобы проиллюстрировать это, создадим несколько столбцов, иллюстрирующих оценки группы студентов по разным дисциплинам.
Иванов 5
Петров 3
Сидоров 4
Фадеев 2
Name: Математика, dtype: object
________________________________________________________________________________
Сидоров 5
Иванов 3
Петров 4
Name: Физика, dtype: object
________________________________________________________________________________
Петров 5
Сидоров 3
Иванов 4
Name: Химия, dtype: object
________________________________________________________________________________
Заметьте, что в каждом из столбцов студенты перечислены в разном порядке, а также студент “Фадеев” явился только на первый экзамен по математике, а остальные пропустил. Свести все эти столбцы в единую таблицу очень легко именно из-за индекса.
За счет применения индекса при создании столбцов , и библиотека сама разобралась с выравниванием значений этих столбцов. Т.к. только в одном из столбцов присутствовала оценка по метке , то библиотека интерпретировало это так, будто бы в остальных столбцах значение по этой метке пропущено, что в моделируется значением .
Ещё индексы могут быть многоуровневыми, что позволяет в ряде случаев элегантно представлять в табличном виде многомерные данные.
Ниже выводятся индексы созданных ранее объектов .
Индекс таблицы сгенерировался автоматически, т.к. не был явно указан при создании. В таком случае всегда генерируется , который в точности соответствует обычному индексу смещения относительно начала.
RangeIndex(start=0, stop=3, step=1)
Индекс столбца соответствует переданному при создании списку имён.
Разбираем, как начать работу с Pandas. В этой части самые базовые приёмы: чтение и запись данных, индексирование, агрегация и другие основы.
Pandas — это библиотека на Python, предназначенная для обработки и анализа структурированных табличных данных. С её помощью можно фильтровать, сортировать, агрегировать и преобразовывать данные, а также интегрироваться с различными источниками для чтения и записи. Благодаря такому богатому функционалу, эффективности и удобству использования, Pandas — один из наиболее популярных инструментов в области анализа данных.
Руководитель группы видеоаналитики MTS AI Андрей Дугин рассказывает, как начать работу с Pandas и избежать распространённых ошибок.
Где и для чего применяется Pandas
Pandas скорее академический исследовательский инструмент: для промышленных масштабов производительность у библиотеки относительно низкая, управление памятью не самое эффективное и нет параллелизма. Тем не менее, библиотека отлично подходит дата-сайентистам и аналитикам для прототипирования и исследования гипотез в нересурснозатратных проектах. Её можно применить практически в любой области, где требуется обработка и анализ табличных данных или временных рядов:
Рассмотрим некоторые базовые приёмы работы с Pandas на основе классического датасета Titanic. Его используют студенты, изучающие машинное обучение, для предсказания шансов пассажиров на выживание в зависимости от их пола, возраста, класса каюты и других факторов. Подробнее почитать о значении полей можно в описании датасета на Kaggle.
Начало работы с Pandas
Pandas легко установить через стандартный пакетный менеджер Python, используя команду pip install pandas.
После установки следует импортировать саму библиотеку. Поскольку Pandas строится на базе библиотеки NumPy — инструментария для работы с многомерными массивами — для удобства рекомендуется импортировать и её. Она также будет установлена автоматически в процессе установки Pandas.
import numpy as np
import pandas as pd
Структуры хранения данных
Данные организованы в структурированные таблицы с индексами, что облегчает манипуляции с ними. Операции в Pandas оптимизированы для работы по столбцам — так во многих случаях производительность выше, чем в операциях по строкам.
Структур хранения данных в Pandas две — Series и DataFrame.
Здесь и далее будет приводиться вывод в Jupyter Notebook
Есть проводить аналогию со словарём dict, то индекс — это ключи словаря, а сам массив данных — значения, к которым можно получить доступ по ключу:
Операции чтения и записи данных
С помощью Pandas можно читать и записывать данные из различных источников: баз данных, файлов в форматах CSV, Excel, JSON и тому подобных. Для каждого типа данных существуют специализированные функции: read_csv(), read_excel() и другие вида read_*().
titanic = pd.read_csv(«titanic.csv»)
titanic.head()
Можно даже автоматически спарсить таблицу из веб-страницы, указав URL и порядковый номер таблицы:
Функции чтения принимают много параметров, так можно настраивать все необходимые опции, включая явное задание типов данных или соответствующих функций-конвертеров. Это позволяет предобработать данные или преобразовать их типы к более эффективным ещё на этапе чтения из источника.
Записать данные в файл так же просто, как и прочитать — используйте семейство методов to_*(), например, to_excel():
Первичное исследование данных
После того как данные загружены из источника, следует получить общее представление о них.
Первые несколько строк датафрейма можно получить с помощью метода head(), а последние — tail():
Тип данных object чаще всего соответствует строковым значениям:
Pandas позволяет автоматически подобрать наиболее эффективные представления с помощью метода convert_dtypes():
titanic.convert_dtypes().dtypes # Строковые значения теперь представлены типом string, а не object
Другой способ взглянуть на датафрейм — метод info(). Он показывает количество строк, столбцов, их названия и типы, а также позволяет обнаружить столбцы с отсутствующими значениями.
Например, в датасете 891 строка, однако количество ненулевых (non-null) значений в колонках Age, Cabin и Embarked меньше, значит, некоторые данные отсутствуют
Некоторую статистику по числовым столбцам можно собрать с помощью метода describe():
Количество различных значений можно посчитать с помощью value_counts() — как для категориальных, так и для непрерывных данных:
Индексирование
Операции обращения к элементам данных называются индексированием.
В нашем датасете индексная колонка по умолчанию представлена целыми числами. Для наглядности в дальнейших примерах заменим индекс на колонку с именем пассажира:
titanic.set_index(«Name», inplace=True) # Производим изменения на месте — inplace
Элементы индекса называются метками (лейблами):
titanic.index # Это вертикальный индекс; для списка используйте titanic.index.tolist()
Названия колонок — тоже метки:
titanic.columns # Это горизонтальный индекс
К колонкам можно обращаться по их названиям:
Если имя колонки удовлетворяет правилам именования переменных в Python и не совпадает с одним из уже существующих методов или атрибутов DataFrame, то к колонке можно обратиться как к атрибуту DataFrame:
При совершении операций над объектами DataFrame и Series Pandas пытается сопоставить элементы с одинаковыми индексами. Рассмотрим для примера последовательность Series с геометрической прогрессией, где каждый следующий элемент больше предыдущего в два раза:
series = pd. Series(2 ** np.arange
)
series
Попытка попарно посчитать отношение следующего элемента к предыдущему приведёт к «странному» результату:
На самом деле мы хотели получить следующее:
Объединение данных
Для объединения нескольких датафреймов можно использовать близкие по смыслу функции: merge(), concat() и join(). Вот несколько базовых примеров:
pd.merge(df1, df2, on=»key», how=»inner»)
df1.join(df2, how=»inner», lsuffix=»_1″, rsuffix=»_2″)
Агрегация данных
С помощью этих функций и методов можно взглянуть на данные в различных разрезах:
Рассчитаем средний возраст пассажиров с разбиением по полу:
Построим сводную таблицу, рассчитав вероятность выживания в зависимости от пола и класса:
pd.pivot_table(titanic, values=»Survived», index=»Sex», columns=»Pclass», aggfunc=»mean»)
Посчитаем, сколько человек каждого пола было в трёх классах кают:
Групповые операции
При обработке данных новички часто используют циклы для итераций по строкам или ячейкам. Такой код выполняется медленно. Лучше использовать методы .apply(), .map(), .transform(), которые работают быстрее за счёт векторизации.
Кстати, такое же разбиение на возрастные группы можно выполнить с помощью функции pd.cut():
Работа с пропущенными данными
В реальных датасетах часть данных может отсутствовать. В библиотеке Pandas эти пропуски обычно представлены как NaN (Not a Number) в ячейках DataFrame или Series. Чтобы с ними работать можно использовать ключевые методы:
Метод isna() есть как у DataFrame, так и у Series, а результатом его вызова будет булевая маска того же класса:
Если датасет небольшой, то удалять отсутствующие данные слишком расточительно. Лучше придумать, как заполнить недостающие значения.
Например, можно заменить их средними значениями в столбце:
Или заполнить предыдущим, либо последующим значением:
Методы генерации и заполнения отсутствующих значений называются импутингом. В библиотеке scikit-learn есть модуль sklearn.impute, в котором представлены несколько классов импутеров, основанных на различных алгоритмах.
Визуализация данных
Pandas интегрирована с библиотекой Matplotlib — инструментом для создания двумерных и трёхмерных графических представлений данных. В Pandas можно либо явно использовать её функции для визуализации данных, либо применять встроенные методы, такие как .plot() и .hist(). Второй вариант облегчает построение графиков, автоматически определяя наилучший способ визуализации данных.
То же самое можно сделать через прямой вызов функций matplotlib:
Работа с временными рядами
Индексная колонка датафрейма представлена датой и временем, что позволяет индексировать данные по дате и времени, ресемплировать (осуществлять выборку с большей или с меньшей частотой), интерполировать отсутствующие данные, применять оконные функции.
Допустим, у нас есть статистика перевозки пассажиров некой авиакомпании. Сгенерируем эти данные по месяцам:
А теперь рассчитаем среднемесячное количество пассажиров по каждому году:
df_downsampled = df.resample(«A»).mean()
Применим скользящее окно и рассчитаем среднее количество пассажиров за последние 12 месяцев:
df_rolled = df.rolling
.mean()
В первых 11 строках по умолчанию появились значения NaN, так как количество проанализированных строк меньше размера окна. Это поведение можно изменить, задав параметр min_periods — минимальное количество строк, для которых определён результат:
В заключение
В этой части статьи мы рассмотрели, как использовать Pandas для разных базовых задач. Во второй части разберём, как сделать работу с Pandas эффективнее, узнаем, какие есть альтернативы для этой библиотеки и какие источники можно почитать, чтобы ещё лучше в ней ориентироваться. Следите за обновлениями!
Основная функциональность
Приведем основные подходы к работе с данными, содержащимися в Series
и DataFrame.
Переиндексация
Важный метод в объектах pandas — это reindex, который создает
новый объект с данными, согласованными с новым индексом. Рассмотрим
пример:
Вызов reindex в объекте Series переупорядочивает данные в
соответствии с новым индексом, вводя пропущенные значения, если
какие-либо значения индекса еще не присутствовали:
ля упорядоченных данных, таких как временные ряды, может быть
желательно выполнить некоторую интерполяцию или заполнение значений
при переиндексации. Аргумент method позволяет нам сделать это,
используя метод такой как ffill (forward-fill), который заполняет
«вперед» значениями ряд:
В объектах DataFrame метод reindex может изменять либо индекс
(строки), столбцы, либо и то и то. Когда передается только одна
последовательность, то переиндексируются строки:
Столбцы переиндексируются с помощью аргумента columns:
В таблице pandas:functionality:tbl:1 представлены аргументы
функции reindex.
Таблица 3. Аргументы функции reindex
Удаление записей с оси
Удалить одну или несколько записей легко, если имеется массив или
список индексов, которые не содержат эти записи. Поскольку это может
потребовать некоторых операций над множествами, метод drop
возвращает новый объект с указанными значениями, удаленными с оси:
В DataFrame значения индекса могут быть удалены с любой оси:
data pdDataFrame(nparange()reshape((, )),
data
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15
Вызов drop с последовательностью меток удаляет значения из меток
строк (ось 0):
Удалить значения в столбцах можно передавая параметр axis=1 или
axis=columns:
Многие функции, такие как drop, которые изменяют размер или форму
Series или DataFrame, могут изменять сам объект (in-place) без
создания нового объекта:
objdrop(, inplace)
obj
a 0.0
b 1.0
d 3.0
e 4.0
Предупреждение
Будьте осторожны с параметром inplace, так как происходит удаление
данных.
Арифметические операции и выравнивание данных
Важной особенностью pandas для некоторых приложений является поведение
арифметических операций между объектами с разными индексами. При
сложении объекты в случае, когда любые пары индексов отличаются,
соответствующий индекс в результате является объединением исходных
индексов:
Выравнивание данных вводит пропущенные значения в местах
меток, которые не пересекаются. Пропущенные значения будут
распространяться в дальнейших арифметических вычислениях.
В случае DataFrame выравнивание осуществляется как для строк, так и
для столбцов:
df1 pdDataFrame(nparange()reshape((, )), columns(),
df2 pdDataFrame(nparange()reshape((, )), columns(),
df1
b c d
Ohio 0.0 1.0 2.0
Texas 3.0 4.0 5.0
Colorado 6.0 7.0 8.0
df2
b d e
Utah 0.0 1.0 2.0
Ohio 3.0 4.0 5.0
Texas 6.0 7.0 8.0
Oregon 9.0 10.0 11.0
Сумма введенных объектов вернет новый объект DataFrame, чьи индексы
и столбцы являются объединениями индексов и столбцов двух складываемых
объектов:
df1 df2
b c d e
Colorado NaN NaN NaN NaN
Ohio 3.0 NaN 6.0 NaN
Oregon NaN NaN NaN NaN
Texas 9.0 NaN 12.0 NaN
Utah NaN NaN NaN NaN
Так как столбцы ‘c’ и ‘e’ не находятся одновременно в обоих
объектах DataFrame, в результате они содержат отсутствующие
значения. Такое же происходит и со строками.
Если сложить объекты DataFrame без общих меток столбцов или строк,
результат будет содержать все отсутствующие значения:
Арифметические методы с заполнением значений
Сложение этих объектов приводит к значениям NA в местах, которые не
перекрываются:
df1 df2
a b c d e
0 0.0 2.0 4.0 6.0 NaN
1 9.0 NaN 13.0 15.0 NaN
2 18.0 20.0 22.0 24.0 NaN
3 NaN NaN NaN NaN NaN
Для заполнения отсутствующих значений можно воспользоваться функцией
add с дополнительным аргументом fill_value:
df1add(df2, fill_value)
a b c d e
0 0.0 2.0 4.0 6.0 4.0
1 9.0 5.0 13.0 15.0 9.0
2 18.0 20.0 22.0 24.0 14.0
3 15.0 16.0 17.0 18.0 19.0
В таблице pandas:functionality:tbl:2 представлены методы для
арифметических операций. У каждого из них есть аналог, начинающийся с
буквы r, у которого переставлены аргументы. Приведенные ниже
примеры эквивалентны:
df1
a b c d
0 inf 1.000000 0.500000 0.333333
1 0.250 0.200000 0.166667 0.142857
2 0.125 0.111111 0.100000 0.090909
df1rdiv()
a b c d
0 inf 1.000000 0.500000 0.333333
1 0.250 0.200000 0.166667 0.142857
2 0.125 0.111111 0.100000 0.090909
Соответственно, при переиндексации Series или DataFrame вы также
можете указать другое значение заполнения:
df1reindex(columnsdf2columns, fill_value)
a b c d e
0 0.0 1.0 2.0 3.0 0
1 4.0 5.0 6.0 7.0 0
2 8.0 9.0 10.0 11.0 0
Таблица 4. Гибкие арифметические методы
Операции между объектами DataFrame и Series
Как и для массивов NumPy разной размерности, существуют арифметические
операции между объектами DataFrame и Series. В качестве примера
рассмотрим разность между двумерным массивом и одной из его строк:
По умолчанию арифметические операции между DataFrame и Series
приводят индексы объекта Series к столбцам объекта DataFrame,
распространяя операцию по строкам:
frame series
b d e
Utah 0.0 0.0 0.0
Ohio 3.0 3.0 3.0
Texas 6.0 6.0 6.0
Oregon 9.0 9.0 9.0
Если значение индекса не найдено ни в столбцах DataFrame, ни в индексе
Series, объекты будут переиндексированы для формирования
объединения:
Если вместо согласования по столбцам нужно согласовывать операцию по
строкам, нужно использовать арифметический метод:
Применение функций и отображение
Универсальные функции NumPy также работают с объектами pandas:
frame pdDataFrame(nprandomrandn(, ), columns(),
frame
b d e
Utah -0.373512 -0.408758 -0.865501
Ohio 0.644210 -1.974533 0.827712
Texas -0.002276 -0.452517 0.904933
Oregon -0.458469 0.526754 -1.517036
npabs(frame)
b d e
Utah 0.373512 0.408758 0.865501
Ohio 0.644210 1.974533 0.827712
Texas 0.002276 0.452517 0.904933
Oregon 0.458469 0.526754 1.517036
Другой частой операцией является применение функции к одномерным
массивам для каждого столбца или строки. Метод apply объекта
DataFrame выполняет это:
f x: xmax() xmin()
frameapply(f)
b 1.102679
d 2.501287
e 2.421969
В результате мы получили объект Series, у которого индекс совпадает
со столбцами объекта DataFrame.
Если задать параметр axis = ‘columns’ в функции apply, функция
будет применяться к строкам:
frameapply(f, axis)
Utah 0.491989
Ohio 2.802245
Texas 1.357449
Oregon 2.043790
Многие из наиболее распространенных статистических методов
(например, sum и mean) являются методами DataFrame, поэтому
использование apply не обязательно.
Функция, передаваемая в apply, не обязана возвращать скалярное
значение, она может также возвращать объект Series:
Также можно использовать поэлементные функции. Предположим, нужно
получить форматированную строку для каждого значения в объекте
frame. Это можно реализовать с помощью функции applymap:
x: x
frameapplymap()
b d e
Utah 0.49 0.66 0.80
Ohio 1.30 -0.74 0.24
Texas -0.95 -1.29 0.15
Oregon -0.27 0.68 1.05
В функции applymap используется метод map класса Series:
Сортировка и ранжирование
Одна из важных встроенных операций — это сортировка данных. Для того,
чтобы выполнить лексикографическую сортировку по индексам строк или
столбцов, можно использовать функцию sort_index, которая возвращает
новый отсортированный объект:
frame pdDataFrame(nparange()reshape((, )),
framesort_index()
d a b c
one 4 5 6 7
three 0 1 2 3
framesort_index(axis)
a b c d
three 1 2 3 0
one 5 6 7 4
Данные сортируются по возрастанию по умолчанию, но могут быть
отсортированы также по убыванию:
framesort_index(axis, ascending)
d c b a
three 0 3 2 1
one 4 7 6 5
Для сортировки объекта Series по значениям используется метод
sort_values:
Все пропущенные значения по умолчанию сортируются в конец объекта
Series:
При сортировке объекта DataFrame можно использовать данные в одном
или нескольких столбцах в качестве ключей для сортировки. Чтобы
выполнить это, необходимо передать имя одного или нескольких столбцов
параметру by метода sort_vlues:
Для сортировки по нескольким столбцам, необходимо передать список
имен столбцов:
Ранжирование заключается в присвоении ранга от единицы до числа значений в
массиве. Объекты Series и DataFrame имеют метод rank, который по
умолчанию разрывает связи, присваивая каждой группе среднее значение
ранга:
Ранги также могут быть назначены в соответствии с порядком, в котором
они наблюдаются в данных:
objrank(method)
0 6.0
1 1.0
2 7.0
3 4.0
4 3.0
5 2.0
6 5.0
Здесь вместо использования среднего ранга ( 6.5 ) для записей с
индексами 0 и 2 они вместо этого были установлены на
и
,
потому что метка ( 0 ) предшествует метке
в данных.
В таблице pandas:functionality:tbl:3 представлен перечень методов
построения ранга.
Объект DataFrame может вычислять ранги по строкам или по столбцам:
Таблица 5. Методы ранжирования
