How to Use NumPy’s datetime64 and timedelta64 Data Types

Updated: January 22, 2024 By: Guest Contributor Post a comment

Overview

In the world of data analysis and scientific computing, efficiently handling date and time data is indispensable. NumPy, a powerful Python library, provides specialized data types to deal with dates and times in a vectorized form, ensuring high performance and ease of use. In this tutorial, we will explore NumPy’s datetime64 and timedelta64 data types. We’re going to understand their utilities and learn how to use them effectively through a series of code examples, from simple to advanced usage.

Introduction to Datetime in NumPy

NumPy’s datetime64 data type offers a compact and efficient representation of dates and times. Unlike Python’s standard datetime module, which handles individual dates, datetime64 is designed to work with arrays of dates and times, allowing fast operations on large datasets.

Getting Started with datetime64

Before we delve into code examples, make sure you have NumPy installed. If not, you can install it using pip:

pip install numpy

Creating a datetime64 Object

import numpy as np

# Create a single datetime64 object
single_date = np.datetime64('2023-01-01')
print(single_date)
# Output: 2023-01-01

Just by providing a string with a date, NumPy creates a datetime64 instance. You can also specify the granularity (e.g. ‘Y’, ‘M’, ‘D’, etc.), which offers control over the level of precision you need.

# Create a datetime64 object with year granularity
year_date = np.datetime64('2023', 'Y')
print(year_date)
# Output: 2023

Arrays of Dates

One of the benefits of using datetime64 is the ability to create and manipulate arrays of dates.

# Creating an array of dates

# Daily dates starting from Jan 1, 2023
array_of_dates = np.array(['2023-01-01', '2023-01-02', '2023-01-03'], dtype='datetime64[D]')
print(array_of_dates)
# Output: ['2023-01-01' '2023-01-02' '2023-01-03']

An array of dates can be easily generated using the arange function.

# Generate an array of dates using arange

week_dates = np.arange('2023-01-01', '2023-01-08', dtype='datetime64[D]')
print(week_dates)
# Output: ['2023-01-01' '2023-01-02' '2023-01-03' '2023-01-04' '2023-01-05' '2023-01-06' '2023-01-07']

Basic Operations with datetime64

Arithmetic Operations

Arithmetic operations with datetime64 arrays are straightforward and extremely performant.

# Add days to a date

new_date = single_date + np.timedelta64(5, 'D')
print(new_date)
# Output: 2023-01-06

Subtraction, similarly, yields a timedelta64 when performed between two dates.

# Difference between two dates

different_date = np.datetime64('2023-01-06')
number_of_days = different_date - single_date
print(number_of_days)
# Output: 5 days

Comparison Operations

Comparison operations are also efficient on arrays of datetime64 objects.

# Compare dates within an array

comparison_result = array_of_dates > '2023-01-02'
print(comparison_result)
# Output: [False False  True]

Working with timedelta64

The timedelta64 data type represents time spans in NumPy, essential for arithmetic and comparisons involving time intervals.

Creating timedelta64 Objects

# Create a time span of 5 hours

time_span = np.timedelta64(5, 'h')
print(time_span)
# Output: 5 hours

Arrays of Time Differences

As with datetimes, we can create arrays of time differences.

# Array of time spans

time_spans = np.array([1, 2, 3], dtype='timedelta64[h]')
print(time_spans)
# Output: [1 2 3] hours

Operations on arrays of timedelta64 data types are similar to those on datetime64 objects.

Advanced Operations

Handling ISO 8601 Durations

NumPy can parse ISO 8601 duration strings directly into timedelta64 objects.

# Parse an ISO 8601 duration to timedelta64

isoduration = np.timedelta64('P1DT5H10M')  # 1 day, 5 hours, 10 minutes
print(isoduration)
# Output: 29 hours 10 minutes

Generating Date Ranges with Custom Frequencies

You can create more complex date ranges using various frequency strings.

# Monthly date range over a year

monthly_dates = np.arange('2023-01', '2024-01', dtype='datetime64[M]')
print(monthly_dates)
# Output: ['2023-01' '2023-02' '2023-03' '2023-04' '2023-05' '2023-06' '2023-07' '2023-08' '2023-09' '2023-10' '2023-11' '2023-12']

Conclusion

The datetime64 and timedelta64 data types are powerful tools in handling dates and times in NumPy arrays. We’ve demonstrated basic to advanced operations with these types, showcasing how effortless it is to perform calculations and manipulate time-related data in NumPy. Armed with these skills, you are now ready to take on time series analysis and other date-time data operations in your data science endeavors.