Специальные объекты даты и времени, которые вы должны знать.

В первой части серии pandas Date and Time я исследовал ядро ​​​​функциональности временных рядов pandas — в этой статье я хотел бы взглянуть на немного более специальные объекты времени, разработанные для упрощения арифметики Timestamp и соответствия особые потребности для маркировки времени в ваших данных.



В этой статье я буду использовать набор данных Kaggle Flat Earth on Twitter.

Примечание: функции, показанные в этой статье, представляют собой лишь крошечную часть всех возможностей различных объектов времени в Python и Pandas — те, которые я счел нужным представить во вступительном посте, просто чтобы дать представление о силе этих объектов. объекты. Я не хочу создавать впечатление, что это пределы темы — это было бы неправдой при любом натяжении воображения.

Дельты времени

Timedeltas — это объекты, представляющие разницу между двумя моментами времени, между двумя временными метками.

Он может использовать несколько различных единиц измерения (например, минуты, дни) и может быть как положительным, так и отрицательным.

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

Вы можете создать объект Timedelta, используя Pandas.Timedelta. Здесь вам нужно указать в качестве аргумента (ов), какую продолжительность timedelta вы хотели бы иметь. Для этого вы можете, например, использовать строки в качестве аргументов или предоставить целые числа в качестве аргументов ключевого слова (есть несколько других методов, которые вы можете найти в разделе документации Разбор временных дельт):

Если мы хотим увеличить значение Timestamp на определенное время, мы можем использовать timedeltas для выполнения этой операции. Предположим, вы просто не можете дождаться Рождества, поэтому решили перевести часы на 3 дня вперед:

Примечание: если вы хотите выполнить эту операцию, вам нужно будет найти достаточно тяжелый объект в вашей конкретной части вселенной (черная дыра всегда хороший выбор), который поможет вам пережить ожидание Санты.

Конечно, мы можем извлечь Timedeltas из Timestamps, более того, мы можем выполнять операции с целыми диапазонами дат без циклов:

Timedeltas также можно применять к рядам дат и времени. Возвращаясь к нашим данным Flat Earth, мы можем легко создать новую серию на основе исходной даты создания пользователя:

Предположим, мы хотели бы знать, сколько дней (месяцев, лет, секунд) назад были созданы пользователи в примере DataFrame. Мы можем использовать объекты Timedelta, отмечающие разницу между сегодняшним днем ​​и датой создания, чтобы разделить их с другим Timedelta, значение которого зависит от того, какую метрику мы хотели бы видеть:

Объекты Timedelta имеют атрибуты и методы для доступа к определенным частям данных или выполнения дальнейших операций — все это можно найти в документации.

Если вы хотите, чтобы я получал кофеин за создание большего количества подобного контента, пожалуйста, поддержите меня, просто выпив чашечку кофе.

Смещения даты

DateOffests тесно связаны с Timedeltas, однако работают немного по-другому. Различная логика, стоящая за ними, заключается, например, в том, что иногда разница между двумя днями подряд в полночь не составляет 24 часа: например. Переход на летнее время может немного встряхнуть ситуацию. 1 день Timedelta всегда будет добавлять 24 часа к временной метке, а DateOffset будет сдвигать временную метку вперед на следующий день и точный час исходной временной метки:

Объекты смещения предлагают множество возможностей для перемещения временных меток вперед или назад к определенному логическому моменту времени, а не на фиксированный период. используя данные Flat Earth, давайте узнаем ближайший рабочий день к созданию учетных записей пользователей:

Как видите, если Временная метка была указана в рабочие часы, Временная метка «следующий_рабочий_день» совпадает с исходной. В нерабочее время при прокрутке вперед Временная метка перемещалась на следующий рабочий день. Если она применялась в субботу, вместо переноса на следующий день смещение искалось на следующий понедельник.

Периоды

Период — это определенный период времени (час, день, неделя, месяц, квартал и т. д.), представленный в объекте времени.

Основная идея заключается в том, что в то время как Временная метка представляет определенный момент времени, Период (даже если он может иметь такое высокое разрешение, что указывает на определенная секунда, например) используется, когда ваши данные отмечены объектом, связанным с периодическим повторением, промежутком времени, с которым связаны данные.

Хорошим примером этого являются данные о продажах: каждый раз, когда вы продаете пончик в своем магазине, вы записываете эту продажу, и время продажи (Временная метка) связывается с каждой транзакцией. 100 покупок в день приводят к появлению до 100 различных отметок времени. Однако, когда вы суммируете свой доход в конце дня, у вас есть сумма дохода и день (Период), когда он был реализован. На следующий день следующие 100 отметок времени для транзакций, но ваш ежедневный доход получает только 1 отметку периода — нет необходимости в конкретной отметке времени. Ваши ежедневные Периоды также могут быть объединены в месячные, квартальные и годовые Периоды. Дело в том, что эти периоды времени повторяются с определенной логикой, и это то, что фиксирует Периоды.

На первый взгляд кажется, что нет большой разницы между Timestamp и Period — смысл начинает проясняться, когда мы начинаем играть с арифметикой и методами. /атрибуты, связанные с Периодами. Параметр частоты, например, играет огромную роль в логике: при добавлении или вычитании к периоду будет добавлена ​​сумма, указанная в параметре частоты:

Как вы можете видеть, поскольку в приведенном выше примере частота была установлена ​​​​на 3 часа, добавление 1 добавило 3 часа (= 1 единица частоты).

Создание диапазонов периодов — это один из основных вариантов использования, который я думаю при работе с этими объектами, в конце концов, весь смысл в том, чтобы иметь какое-то регулярное повторение при использовании этих типов:

Периоды охватывают заданный промежуток времени, и объект может возвращать начало и конец этих промежутков времени. Создание Диапазона периодов, где периодичность обозначает кварталы, даты начала и окончания будут выглядеть следующим образом:

Полный список атрибутов и методов, доступных в объекте Period, можно найти в документации.

Временные меткиконечно, могут быть преобразованы в Периоды (и наоборот): добавление начала квартала, в котором был создан каждый пользователь в наборе данных Flat Earth, выполняется так же просто, как показано ниже. строка кода:

Функциональность даты и времени в пандах имеет невероятную глубину. Как вы, вероятно, можете сказать, основываясь только на этих двух сообщениях на эту тему, трудно придумать какую-либо проблему, которую вы не можете решить, используя уже существующие встроенные решения. Я надеюсь, что эта серия из двух частей показалась вам полезной, и, как всегда, я призываю вас посетить и прочитать связанную документацию, чтобы узнать еще больше.