Работа с датами и временем в NumPy

Основы работы с датой и временем в NumPy

NumPy предоставляет специальные типы данных для работы с датами и временем: datetime64 и timedelta64. Эти объекты позволяют эффективно манипулировать датами и временем, выполняя различные операции, такие как сложение, вычитание и др.

datetime64

Представляет собой объект даты и времени с фиксированной точностью. Отличительная особенность datetime64 по сравнению с родным объектом Python datetime заключается в том, что он позволяет компактно хранить большие массивы дат и времени и проводить вычисления над ними с высокой производительностью.

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

import numpy as np

# Создание объекта datetime64, представляющего собой дату
date = np.datetime64('2023-08-25')
print(date)  # 2023-08-25

Вы также можете указать точность до месяцев, дней, часов, минут и так далее:

# Точность до месяца
month = np.datetime64('2023-08')
print(month)  # 2023-08

# Точность до минут
minute = np.datetime64('2023-08-25T15:30')
print(minute)  # 2023-08-25T15:30

timedelta64

Пока datetime64 представляет конкретные моменты времени, timedelta64 используется для представления разности между двумя моментами времени. Это аналогично timedelta в стандартной библиотеке Python.

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

import numpy as np

# Разница в 5 днях
duration_days = np.timedelta64(5, 'D')
print(duration_days)  # 5 days

# Разница в 30 минутах
duration_minutes = np.timedelta64(30, 'm')
print(duration_minutes)  # 30 minutes

# Разница в 2 часах
duration_hours = np.timedelta64(2, 'h')
print(duration_hours)  # 2 hours

Операции с датами в NumPy

NumPy предоставляет функциональные возможности для работы с датами и временем, которые являются эффективными и гибкими. Давайте рассмотрим некоторые из основных операций с датами, доступных в NumPy.

Арифметические операции

Сложение и вычитание: мы можем прибавлять или вычитать объект timedelta64 из объекта datetime64.

import numpy as np

date = np.datetime64('2023-08-25')
duration = np.timedelta64(5, 'D')

future_date = date + duration
print(future_date)  # 2023-08-30

past_date = date - duration
print(past_date)  # 2023-08-20

Разница между двумя датами: возвращает объект timedelta64.

import numpy as np

start_date = np.datetime64('2023-08-01')
end_date = np.datetime64('2023-08-25')

duration = end_date - start_date
print(duration)  # 24 days

Сравнение дат

Даты можно сравнивать, чтобы определить, какая из них раньше или позже:

import numpy as np

date1 = np.datetime64('2023-08-01')
date2 = np.datetime64('2023-08-25')

print(date1 < date2)  # True
print(date1 == date2)  # False

Создание диапазонов дат

NumPy позволяет создавать последовательные диапазоны дат:

import numpy as np

dates_range = np.arange('2023-08-01', '2023-09-01', dtype='datetime64[D]')
print(dates_range)  

# ['2023-08-01' '2023-08-02' '2023-08-03' '2023-08-04' '2023-08-05'
#  '2023-08-06' '2023-08-07' '2023-08-08' '2023-08-09' '2023-08-10'
#  '2023-08-11' '2023-08-12' '2023-08-13' '2023-08-14' '2023-08-15'
#  '2023-08-16' '2023-08-17' '2023-08-18' '2023-08-19' '2023-08-20'
#  '2023-08-21' '2023-08-22' '2023-08-23' '2023-08-24' '2023-08-25'
#  '2023-08-26' '2023-08-27' '2023-08-28' '2023-08-29' '2023-08-30'
#  '2023-08-31']

Изменение точности дат

Вы можете изменять точность объектов datetime64, например, с дней на месяцы или наоборот:

date_month = np.datetime64('2023-08', 'M')
date_day = np.datetime64(date_month, 'D')
print(date_day)  # 2023-08-01

Вычисления над датами

Для вычисления статистики или агрегации по датам вы можете использовать стандартные функции NumPy, такие как mean(), min() и max(). Например, для нахождения самой ранней даты в массиве:

import numpy as np

dates = np.array(['2023-08-01', '2023-08-10', '2023-07-25'], dtype='datetime64[D]')
print(np.min(dates))  # 2023-07-25

Эти операции делают NumPy инструментом выбора для многих специалистов, работающих с временными рядами или датами в контексте научных вычислений.

Заключение

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

Содержание: