Cannot subtract datetimearray from ndarray

The error “cannot subtract datetimearray from ndarray” occurs when you try to perform subtraction between a NumPy ndarray (array) and a NumPy datetimearray.

In order to explain this error, let’s take an example:

    import numpy as np
    
    # Creating a NumPy ndarray
    array = np.array([10, 20, 30, 40])
    
    # Creating a NumPy datetimearray
    datetime_array = np.array(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'], dtype='datetime64[D]')
    
    # Trying to subtract datetime_array from array
    result = array - datetime_array
  

When we run this code, we will encounter the error “TypeError: ufunc ‘subtract’ cannot operate with a datetimearray and a ndarray”.

The reason behind this error is that NumPy ndarray supports element-wise operations like subtraction, but it expects both operands to be of the same type. In this case, ‘array’ is an ndarray of integers, while ‘datetime_array’ is a datetimearray.

To perform subtraction between an ndarray and a datetimearray, you need to convert one of them to a compatible type. One way to do this is to convert the ndarray to a datetimearray by specifying a common time unit (e.g., ‘D’ for days) and then perform the subtraction.

    import numpy as np
    
    # Creating a NumPy ndarray
    array = np.array([10, 20, 30, 40])
    
    # Creating a NumPy datetimearray
    datetime_array = np.array(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'], dtype='datetime64[D]')
    
    # Converting array to datetimearray by specifying 'D'
    array_as_datetime = np.array(['1970-01-01'], dtype='datetime64[D]') + np.array(array, dtype='timedelta64[D]')
    
    # Performing subtraction
    result = array_as_datetime - datetime_array
  

By converting the ‘array’ to a datetimearray using the ‘timedelta64[D]’ type, we can perform the subtraction with ‘datetime_array’. The result will be a new datetimearray with the differences between the corresponding elements.

Read more

Leave a comment