Как работать с датами в pandas / Хабр
Библиотека Pandas — это весьма эффективный инструмент для обработки данных, представляющих собой временные ряды. На самом деле, эта библиотека была создана Уэсом МакКинни для работы с финансовыми данными, которые состоят, главным образом, из временных рядов.
При работе с временными рядами много сил уходит на выполнение различных операций с датой и временем. Этот материал посвящён ответам на четыре распространённых вопроса из данной сферы.
Возможно, вы уже сталкивались с этими вопросами. Ответить на все из них, кроме последнего, можно сравнительно просто. А вот ответ на последний, довольно-таки хитрый вопрос, представляет собой последовательность из нескольких действий.
Начнём с создания учебного датафрейма (объекта DataFrame
), с которым будем экспериментировать:
df = pd.DataFrame({ "booking_id": [1001, 1002, 1003, 1004, 1005], "property" : ["A", "A", "B", "B", "C"], "created_at": ["2022-03-01", "2022-02-10", "2022-04-12", "2022-04-11", "2022-06-05"], "checkin_date": ["2022-06-01", "2022-06-10", "2022-06-02", "2022-06-20", "2022-08-10"], "checkout_date": ["2022-06-06", "2022-06-15", "2022-06-06","2022-06-28", "2022-08-16"], "amount": [5400, 5600, 4800, 9000, 6500] }) # изменение типа данных date_cols = ["created_at","checkin_date","checkout_date"] df[date_cols] = df[date_cols].Датафрейм, с которым мы будем работатьastype("datetime64[ns]") # вывод объекта DataFrame df
Для того чтобы у нас была бы возможность пользоваться функциями pandas, предназначенными для работы с датой и временем, даты в датафрейме должны быть представлены значениями подходящего типа данных. Именно по этой причине мы поменяли тип данных соответствующих столбцов на datetime64[ns]
.
1. Как извлечь из даты информацию о месяце и годе?
Дата содержит различные фрагменты информации, такие как год, день недели, месяц и так далее. Все эти фрагменты можно извлечь из даты с использованием методов, к которым обращаются через аксессор dt
.
Например, месяц можно получить с помощью метода month
. А как получить сведения о годе и месяце в формате ГГГГ-ММ
? Ответ на этот вопрос уже не так очевиден. Извлечь эти сведения из даты можно, прибегнув к методу to_period
:
# создание столбца year_month df["year_month"] = df["created_at"]. dt.to_period("M") # вывод объекта DataFrame dfСтолбец year_month в датафрейме
2. Как прибавить к дате временной интервал?
Прибавление к датам временных интервалов или вычитание их из дат — это одна из операций, часто встречающихся при работе с датами. Выполнить её можно, воспользовавшись функцией DateOffset
.
Добавим 1 день к дате выселения (например — из некоего объекта недвижимости) (checkout_date
) для записи о бронировании с идентификатором
:
df.loc[df["booking_id"]==1001, "checkout_date"] = \ df.loc[df["booking_id"]==1001, "checkout_date"] + \ pd.DateOffset(days=1) # проверка результата print(df.loc[df["booking_id"]==1001, "checkout_date"]) # вывод 0 2022-06-07 Name: checkout_date, dtype: datetime64[ns]
3. Как найти интервал в днях между двумя датами?
Интервал между двумя датами можно найти, вычтя одну из другой. Результатом этой операции будет объект Timedelta
, а это не совсем то, что нам нужно:
df["checkout_date"][0] - df["checkin_date"][0] # вывод Timedelta('6 days 00:00:00')
Получить разницу между датами в днях, в виде целого числа, можно, воспользовавшись атрибутом days
. Создадим столбец, который выводит разницу в днях между датой вселения (checkin_date
) и датой создания бронирования (created_at
):
# разница, выраженная в днях df["days_to_checkin"] = \ (df["checkin_date"] - df["created_at"]).dt.days # вывод объекта DataFrame dfСтолбец days_to_checkin в датафрейме
4. Как сформировать последовательность дат между начальной и конечной датами?
Предположим, нам нужен календарь, который показывает дни, в которые объект недвижимости забронирован. Сейчас в первой строке датафрейма есть запись о том, что объект недвижимости A
забронирован с 2022–06–01
по 2022–06–07
. Получается, что объект A
забронирован на даты 2022–06–01
, 2022–06–02
, 2022–06–03
, 2022–06–04
, 2022–06–05
, 2022–06–06
(если предположить, что постоялец выселяется в 10 утра 2022–06–07
).
Такой календарь можно создать, найдя даты между датами вселения и выселения и внеся их в объект DataFrame
.
Для начала создадим датафрейм
, содержащий столбцы property
, checkin_date
и checkout_date
:
# создание объекта DataFrame calendar calendar = df[["property","checkin_date","checkout_date"]]
Функция date_range
даёт нам даты, находящиеся между начальной и конечной датами. Вот что получится для первой записи о бронировании:
pd.date_range(calendar["checkin_date"][0], calendar["checkout_date"][0]) # вывод DatetimeIndex(['2022-06-01', '2022-06-02', '2022-06-03', '2022-06-04', '2022-06-05', '2022-06-06', '2022-06-07'], dtype='datetime64[ns]', freq='D')
Тут есть одна проблема: нам не нужно, чтобы дата выселения (checkout_date
) была бы показана как дата, когда объект недвижимости забронирован. Поэтому мы, прежде чем находить диапазон дат, вычтем 1 из даты выселения.
Для того чтобы сделать это для всех строк, нужно воспользоваться функцией apply
.
date_range
в список, воспользовавшись конструктором list
:# создание столбца booked_days calendar.loc[:, "booked_days"] = calendar.apply( lambda x: list( pd.date_range( x.checkin_date, x.checkout_date - pd.DateOffset(days=1) ).date ), axis = 1 ) # вывод объекта DataFrame calendarСтолбец booked_days в датафрейме
Далее — нам нужно заполнить датафрейм, развернув даты из столбца booked_days
. В этом нам поможет функция explode
:
# функция explode calendar = calendar.explode( column="booked_days", ignore_index=True )[["property","booked_days"]] # вывод первых 5 строк calendar.head()Первые 5 строк календаря
Теперь у нас имеется календарь дней, в которые объект недвижимости забронирован.
Итоги
Мы нашли ответы на 4 вопроса, решили 4 задачи, с которыми вы, скорее всего, столкнётесь, работая с временными рядами, содержащими даты. Надеемся, вам пригодится то, о чём вы сегодня узнали.
О, а приходите к нам работать? 🤗 💰Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.
Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь.
Сейчас мы ищем плюсовиков, питонистов, дата-инженеров и мл-рисерчеров.
Присоединяйтесь к нашей команде.
DAX функции DATE, DATEVALUE, YEAR, MONTH, DAY, TODAY в Power BI и Power Pivot
Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):
- DAX функция TODAY
- DAX функция DATE
- DAX функция DATEVALUE
- DAX функции YEAR, MONTH и DAY
Приветствую Вас, дорогие друзья, с Вами Будуев Антон. В этой статье мы обсудим функции в DAX, возвращающие дату в том или ином виде. И это функции DATE, DATEVALUE, YEAR, MONTH, DAY и TODAY в Power BI и PowerPivot.
Разберем каждую из функций отдельно.
Для Вашего удобства, рекомендую скачать «Справочник DAX функций для Power BI и Power Pivot» в PDF формате.
Если же в Ваших формулах имеются какие-то ошибки, проблемы, а результаты работы формул постоянно не те, что Вы ожидаете и Вам необходима помощь, то записывайтесь в бесплатный экспресс-курс «Быстрый старт в языке функций и формул DAX для Power BI и Power Pivot».
DAX функция TODAY в Power BI и PowerPivot
TODAY () — сегодня. Возвращает текущую дату.
Данная функция очень простая и не содержит в себе ни одного параметра.
Синтаксис:
TODAY ()
Пример формулы:
Сегодня = TODAY ()
Результатом выполнения этой формулы будет текущее сегодняшнее число:
DAX функция DATE в Power BI и PowerPivot
DATE () — возвращает в формате datetime прописанную в параметрах дату.
Синтаксис:
DATE (год; месяц; день)
! — Если месяц не соответствует числам 1-12, то лишние (недостающие) месяца добавляются (убавляются) к году.
! — Если дни не соответствуют числам 1-31 в месяце, то лишние (недостающие) дни добавляются (убавляются) к месяцу и к году.
Примеры формул с использованием функции DATE.
Пример 1: DATE (2018; 13; 23) Результат 1: 23.01.2019 Пример 2: DATE (2018; -1; 23) Результат 2: 23.11.2017 Пример 3: DATE (2018; 01; 32) Результат 4: 01.02.2018 Пример 4: DATE (2018; 02; -1) Результат 4: 30.01.2018
Пример выполнения формулы в Power BI на основе DAX функции DATE будет выглядеть так:
DAX функция DATEVALUE в Power BI и PowerPivot
DATEVALUE () — используя локаль даты ПК, возвращает в формате datetime прописанную в параметрах текстовую дату.
Синтаксис:
DATEVALUE ("Дата")
«Дата» — может быть записана в различных вариантах, в том числе, и сокращенных.
Рассмотрим функцию DATEVALUE на примерах формул:
Пример 1: DATEVALUE ("2018-01-01") Результат 1: 01.01.2018 Пример 2: DATEVALUE ("2018.01.01") Результат 2: 01.01.2018 Пример 3: DATEVALUE ("2018/01/01") Результат 3: 01.01.2018 Пример 4: DATEVALUE ("2018,01,01") Результат 4: 01.01.2018 Пример 5: DATEVALUE ("2018 01 01") Результат 5: 01.01.2018 Пример 6: DATEVALUE ("2018 12") Результат 6: 01.12.2018 Пример 7: DATEVALUE ("декабрь 2018") Результат 7: 01.12.2018 Пример 8: DATEVALUE ("23 дек") Результат 8: 23.12.2018
В Power BI формула на основе DATEVALUE работать будет так:
DAX функции YEAR, MONTH и DAY в Power BI и PowerPivot
YEAR (), MONTH () и DAY () — возвращают год, месяц и день в формате чисел из значения даты.
Синтаксис:
YEAR ([Дата]) MONTH ([Дата]) DAY ([Дата])
Где [Дата] — столбец, содержащий даты, либо дата в текстовом или datetime форматах.
Примеры формул на основе функций YEAR, MONTH и DAY.
Пример 1: YEAR (DATE (2018; 10; 18)) Результат 1: 2018 Пример 2: YEAR ("декабрь 2017") Результат 2: 2017 Пример 3: MONTH (DATE (2018; 10; 18)) Результат 3: 10 Пример 4: MONTH ("18 декабря") Результат 4: 12 Пример 5: DAY (DATE (2018; 10; 13)) Результат 5: 13 Пример 6: DAY ("17 декабря") Результат 6: 17
В большинстве случаев, эти функции в Power BI или PowerPivot будут использоваться со внутренним параметром [Дата], то есть, значение даты будет указано в столбце. Давайте рассмотрим соответствующий пример.
В Power BI Desktop имеется исходная таблица с датами:
Создадим в этой таблице 3 вычисляемых столбца по следующим формулам:
Год = YEAR ([Дата]) Месяц = MONTH ([Дата]) День = DAY ([Дата])
В результате, в Power BI получим следующую расширенную таблицу:
На этом, с разбором функций дат в Power BI и PowerPivot, в этой статье все. Переходите к следующей статье, где мы разберем похожие функции времени.
Пожалуйста, оцените статью:
- 5
- 4
- 3
- 2
- 1
(11 голосов, в среднем: 5 из 5 баллов)
Успехов Вам, друзья!
С уважением, Будуев Антон.
Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.
Также, делитесь данной статьей со своими знакомыми в социальных сетях, возможно, этот материал кому-то будет очень полезен.
Понравился материал статьи?
Добавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D
11-й месяц года
Ноябрь — последний месяц осени в северной половине мира. В южной половине это последний месяц весны.
Рожденный в ноябре цветок — хризантема.
©bigstockphoto.com/basel101658
Ноябрь — одиннадцатый месяц григорианского календаря, состоящий из 30 дней. Это последний месяц осени в Северном полушарии.
Почему ноябрь не девятый месяц?
Значение ноября происходит от Novem , латинское слово, обозначающее девять. Старый римский календарь начинался с марта, поэтому ноябрь был девятым месяцем. Когда римский сенат изменил календарь в 153 г. до н. э., новый год начался в январе, а ноябрь стал одиннадцатым месяцем.
Переход на летнее время заканчивается в США и Канаде
Переход на летнее время (DST) заканчивается в США, Канаде и на севере Мексики. В первое воскресенье ноября часы будут переведены на 1 час назад с 02:00 (2:00) до 01:00 (1:00) в большинстве штатов США. В Европе и многих других странах часы переводятся на октябрь.
Астрономические события в ноябре 2023 года
Метеорный поток Леонид: Падающие звезды Леониды видны с 6 по 30 ноября. Пик потока обычно приходится на ночь 17 ноября и раннее утро 18 ноября с до 15 метеоров в час.
Луна бобра: Ноябрьское полнолуние традиционно называют Луной бобра, в честь бобров, которые строят свои плотины в это время года.
Посмотреть все события Космического Календаря
Падающие звезды Леонида, кажется, исходят от знака зодиака Лев или Лев.
История ноября
В старом римском календаре ноябрь назывался mensis november , девятый месяц, потому что римский календарь начинался с марта. Первоначально в ноябре было 29 дней.
В 154 г. до н.э. восстание вынудило римский сенат изменить начало гражданского года с марта на 1 января. Благодаря этой реформе ноябрь официально стал одиннадцатым месяцем в 153 году до нашей эры.
В 46 году до н. э. Юлий Цезарь ввел новую календарную систему — юлианский календарь. Он добавил десять дней к году и ввел високосный день. В новом юлианском календаре ноябрь был увеличен до 30 дней.
Исторические события ноября
3 ноября 1957 года: Советский Союз отправил на орбиту первое живое существо: собаку Лайку . Лайка находилась на борту Спутника II , второго советского спутника, вышедшего на орбиту вокруг Земли — почти ровно через месяц после Спутника I 4 октября 19 года.57.
5 ноября 16:05: Британский солдат Гай Фокс пытался взорвать английскую палату лордов в Лондоне, чтобы свергнуть короля Якова I и восстановить католическую монархию. Он потерпел неудачу. 5 ноября — День Гая Фокса, который отмечается по всему Соединенному Королевству в память о пороховой измене.
Почтовая марка из Монголии с изображением Лайки, первого существа на орбите Земли.
© iStockphoto.com/fcdb
Камень ноября и цветы рождения
Согласно традиции, камнем рождения ноября является желтый топаз , символизирующий дружбу. Его родимым цветком является хризантема.
Зодиаки.
Восьмой месяц года
Август — последний месяц лета в северной половине мира. Он назван в честь первого римского императора Августа Цезаря.
Цветок рождения Августа — мак.
©bigstockphoto.com/Madlen
Август — восьмой месяц григорианского календаря, в нем 31 день. В северной половине мира август — последний месяц лета. В южной половине это последний месяц зимы.
Месяц Августа
Значение августа происходит из Древнего Рима: Август в переводе с латыни означает «почтенный» или «великий». Это был титул года, данный первому римскому императору , Гай Цезарь. В 8 г. до н. э. римский сенат решил назвать месяц в честь императора. Они выбрали старый римский месяц Секстилий и переименовали его в Август.
Интересные даты августа 2023 года
24 августа 2023 года: Плутон понижен в должности, напоминание о дне в 2006 году, когда Международный астрономический союз объявил Плутон -й карликовой планетой вместо полноразмерной планеты. Этот день отмечается только на Земле.
26 августа 2023: Полярный день заканчивается. В самом северном городе мира Ню-Олесунн в Норвегии подходит к концу длинный день. Очень длинный день — Солнце стоит над горизонтом с апреля. Это долгое время непрерывного солнечного света называется полярным днем. Солнце окончательно заходит около 26 августа и остается за горизонтом до февраля.
Астрономические события августа
Метеоры Персеиды: Метеорный поток Персеиды известен как один из самых активных и ярких метеорных потоков года. Обычно они активны с 17 июля по 24 августа. Как правило, они наиболее заметны между 9 часами ночи.0019 9 августа и 13 августа .
Осетровая луна: Августовское полнолуние известно как Осетровая луна, названная в честь огромной пресноводной рыбы, которую можно найти в большом количестве в августе. Поскольку август года является сезоном сбора урожая года в Северном полушарии, августовское полнолуние также называют Луной зерна, Луной фруктов и Луной ячменя.
Просмотреть все события Космического Календаря
Персеиды наиболее заметны в августе.
©bigstockphoto.com/JohnDorton
История августа
В древнеримском календаре август изначально назывался mens sextilius , шестой месяц , потому что римский календарь начинался с марта. У Секстилиса был 31 день. Примерно в 700 году до нашей эры римский царь Нума Помпилий расширил календарь с десяти до двенадцати месяцев, введя январь и февраль. Sextilis был сокращен до 29 дней.
В 154 г. до н.э. восстание вынудило римский сенат изменить начало гражданского года с марта на 1 января. С этой реформой Секстилис официально стал 9-м.0019 восьмой месяц .
В 46 году до н. э. Юлий Цезарь ввел новую календарную систему — юлианский календарь. Он добавил десять дней к году и ввел високосный день. В новом юлианском календаре секстилис был увеличен до 31 дня.
В 8 году до н. э. римский сенат переименовал Секстилиса в честь первого римского императора, Августа Цезаря .