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']
广告