Как работать с датами в 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"].Столбец year_month в датафреймеdt.to_period("M") # вывод объекта DataFrame df
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 году до н. э. римский сенат переименовал Секстилиса в честь первого римского императора, Августа Цезаря .


dt.to_period("M")
# вывод объекта DataFrame
df