NumPy - 建立日期時間陣列



NumPy 中的日期時間陣列

日期時間陣列是儲存日期和時間值的陣列。NumPy 提供了datetime64timedelta64 資料型別,用於處理具有廣泛精度的日期和時間。

"datetime64" 型別表示日期和時間,而 "timedelta64" 表示日期或時間之間的差異。

建立日期時間陣列

在 NumPy 中,我們可以使用 array() 函式和 datetime64() 函式建立日期時間陣列 -

使用 np.array() 函式

您可以透過使用 numpy.array() 函式指定日期字串或時間戳來建立日期時間陣列。您需要將dtype 指定為datetime64 以確保陣列元素被視為日期時間物件。

以下是語法 -

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

其中,

  • object: 這是您要轉換為 NumPy 陣列的輸入資料(例如,列表、元組或其他類似陣列的物件)。
  • dtype: 指定陣列元素所需的的資料型別。如果未提供,NumPy 將從輸入資料推斷資料型別。
  • copy: 如果為 True,則該函式將建立輸入資料的副本。如果為 False,則僅在必要時建立副本。
  • order: 指定記憶體佈局順序。'C' 表示行優先(C 樣式)順序,'F' 表示列優先(Fortran 樣式)順序,'A' 或 'K' 可用於自動選擇順序。
  • subok: 如果為 True,則傳遞 ndarray 的子類;如果為 False,則返回的陣列將強制為基類 ndarray。
  • ndmin: 指定結果陣列應具有的最小維度數。如有必要,將在形狀的左側新增新的軸。

示例

在以下示例中,我們透過將 "dtype" 引數傳遞給 array() 函式,將日期字串列表轉換為 NumPy 陣列 -

import numpy as np

# Creating a datetime array using date strings
dates = np.array(['2024-08-01', '2024-08-15', '2024-09-01'], dtype='datetime64')

print("Datetime Array:\n", dates)

以下是獲得的輸出 -

Datetime Array:
 ['2024-08-01' '2024-08-15' '2024-09-01']

使用 np.datetime64() 函式

NumPy 中的 datetime64() 函式用於建立日期和時間的陣列。此函式提供了一種處理日期和時間資料的方法,支援對時間序列資料進行操作。"datetime64" 資料型別允許日期和時間精度達到“納秒”級別。

以下是語法 -

numpy.datetime64(datetime_string, unit)

其中,

  • datetime_string: 它是一個表示日期和/或時間的字串。此字串的格式必須與指定的單位匹配。
  • unit (可選): 它指定時間單位(例如,Y、M、D、h、m、s、ms、us、ns)。單位定義日期和時間表示的精度。

示例

在這裡,我們建立單獨的日期時間物件並檢索從指定日期建立的 "datetime64" 物件陣列 -

import numpy as np

# Creating individual datetime objects
date1 = np.datetime64('2024-08-01')
date2 = np.datetime64('2024-08-15')

# Creating an array of datetime objects
dates = np.array([date1, date2, np.datetime64('2024-09-01')])

print("Datetime Array:\n", dates)

這將產生以下結果 -

Datetime Array:
['2024-08-01' '2024-08-15' '2024-09-01']

建立具有特定頻率的日期時間陣列

在 NumPy 中建立具有特定頻率的日期時間陣列允許您生成遵循規則間隔的日期或時間序列,例如每日、每月、每小時等。

在 NumPy 中,您可以使用np.arange()np.linspace() 函式結合datetime64 資料型別來建立具有特定頻率的日期時間陣列。這些函式允許您在開始日期或時間和結束日期或時間之間生成均勻間隔的日期時間值。

使用 np.arange() 函式

np.arange() 函式用於建立具有指定頻率的日期時間陣列。關鍵引數包括開始日期或時間、結束日期或時間以及連續日期時間值之間的步長(頻率)。以下是語法 -

numpy.arange(start, stop, step, dtype='datetime64')

其中,

  • start: 它是以 datetime64 格式表示的開始日期或時間。
  • stop: 它是以 datetime64 格式表示的結束日期或時間(不包括)。
  • step: 它是由 timedelta64 指定的連續日期/時間之間的頻率或間隔。
  • dtype: 它就是資料型別,應該是 'datetime64'。

示例

在下面的示例中,我們正在建立一個從“2024 年 8 月 1 日”到“2024 年 8 月 10 日”的日期陣列,頻率為每天 -

import numpy as np

# Creating a daily datetime array
dates = np.arange('2024-08-01', '2024-08-11', dtype='datetime64[D]')
print("Daily Datetime Array:", dates)

以下是上述程式碼的輸出 -

Daily Datetime Array: ['2024-08-01' '2024-08-02' '2024-08-03' '2024-08-04' '2024-08-05'
 '2024-08-06' '2024-08-07' '2024-08-08' '2024-08-09' '2024-08-10']

使用 np.linspace() 函式

雖然 np.arange() 函式通常用於建立具有特定頻率的日期時間陣列,但當您想要指定兩個日期時間值之間點的數量而不是間隔時,也可以使用 np.linspace() 函式。以下是語法 -

numpy.linspace(start, stop, num, dtype='datetime64')

其中,

  • start: 它是以 "datetime64" 格式表示的開始日期時間值。
  • stop: 它是以 "datetime64" 格式表示的結束日期時間值。
  • num: 它是在 start 和 stop 之間生成的日期時間值的數目。
  • dtype: 它就是資料型別,應該是 'datetime64'。

示例

在此示例中,我們正在建立一個日期時間陣列,該陣列在開始日期和結束日期之間具有 5 個均勻間隔的日期時間值 -

import numpy as np

# Convert start and end dates to datetime64
start_date = np.datetime64('2024-08-01')
end_date = np.datetime64('2024-08-10')

# Calculate the difference in days between start and end
date_range = np.arange(start_date, end_date + np.timedelta64(1, 'D'))

# Use linspace on the integer values of dates
datetimes = np.linspace(0, len(date_range)-1, num=5, dtype=int)

# Map back to the original date range
datetime_array = start_date + datetimes.astype('timedelta64[D]')

print("Datetime Array with 5 Points:", datetime_array)

獲得的輸出如下所示 -

Datetime Array with 5 Points: ['2024-08-01' '2024-08-03' '2024-08-05' '2024-08-07' '2024-08-10']

建立時間陣列

在 NumPy 中建立時間陣列包括生成與時間相關的值的序列,例如小時、分鐘或秒,類似於建立日期陣列的方式。

在 NumPy 中,您可以使用datetime64timedelta64 資料型別建立時間陣列。雖然 "datetime64" 用於時間中的絕對點(例如特定日期和時間),但 "timedelta64" 表示持續時間(例如小時或分鐘)。透過組合這些型別,您可以建立表示特定時刻或間隔的時間值陣列。

示例

以下示例生成一個從午夜開始到中午結束的時間陣列,每個元素表示一個特定的小時 -

import numpy as np

# Define the start and end times
start_time = np.datetime64('2024-08-01T00:00')
end_time = np.datetime64('2024-08-01T12:00')

# Create an array of hourly intervals
time_array = np.arange(start_time, end_time, np.timedelta64(1, 'h'))

print("Time Array:", time_array)

執行上述程式碼後,我們將獲得以下輸出 -

Time Array: 
['2024-08-01T00:00' '2024-08-01T01:00' '2024-08-01T02:00'
 '2024-08-01T03:00' '2024-08-01T04:00' '2024-08-01T05:00'
 '2024-08-01T06:00' '2024-08-01T07:00' '2024-08-01T08:00'
 '2024-08-01T09:00' '2024-08-01T10:00' '2024-08-01T11:00']

組合日期和時間

組合日期和時間包括建立包含日期和一天中特定時間的 "datetime64" 物件。

您可以透過在單個字串中指定日期和時間,或使用 NumPy 的向量化運算組合單獨的日期和時間陣列來建立 datetime64 陣列。

示例

在此示例中,我們建立一個數組,其中每個元素表示特定日期和時間 -

import numpy as np

# Creating datetime arrays with date and time
datetimes = np.array([np.datetime64('2024-08-01T08:00:00'), 
                      np.datetime64('2024-08-02T12:30:00'), 
                      np.datetime64('2024-08-03T16:45:00')])

print("Datetime Array with Date and Time:\n", datetimes)

產生的結果如下 -

Datetime Array with Date and Time:
 ['2024-08-01T08:00:00' '2024-08-02T12:30:00' '2024-08-03T16:45:00']
廣告