NumPy - 创建日期时间数组
NumPy 中的日期时间数组
日期时间数组是用于保存日期和时间值的数组。NumPy 提供 datetime64 和 timedelta64 数据类型,用于处理具有广泛精度范围的日期和时间。
"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 # 使用日期字符串创建日期时间数组 dates = np.array(['2024-08-01', '2024-08-15', '2024-09-01'], dtype='datetime64') print("Datetime Array: ", dates)
以下是获得的输出 -
日期时间数组: ['2024-08-01' '2024-08-15' '2024-09-01']
使用 np.datetime64() 函数
NumPy 中的 datetime64() 函数用于创建日期和时间数组。此函数提供了一种处理日期和时间数据的方法,可以对时间序列数据进行操作。"datetime64"数据类型允许将日期和时间精度精确到"纳秒"级别。
语法如下:
numpy.datetime64(datetime_string, unit)
其中:
- datetime_string: 它是一个表示日期和/或时间的字符串。此字符串的格式必须与指定的单位匹配。
- 单位(可选):指定时间单位(例如,年、月、日、时、分、秒、毫秒、微秒、纳秒)。该单位定义日期和时间表示的精度。
示例
此处,我们创建单独的 datetime 对象,并检索由指定日期创建的"datetime64"对象数组 -
import numpy as np # 创建单独的 datetime 对象 date1 = np.datetime64('2024-08-01') date2 = np.datetime64('2024-08-15') # 创建 datetime 对象数组 dates = np.array([date1, date2, np.datetime64('2024-09-01')]) print("Datetime Array: ", dates)
这将产生以下结果 -
Datetime数组: ['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"。
示例
在下面的示例中,我们创建了一个日期数组,其中包含"8 月 1 日" 2024" 到 "2024 年 8 月 10 日",频率为每日 -
import numpy as np # 创建每日日期时间数组 dates = np.arange('2024-08-01', '2024-08-11', dtype='datetime64[D]') print("每日日期时间数组:", dates)
以下是上述代码的输出 -
每日日期时间数组:['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: 起始和停止之间生成的日期时间值的数量。
- dtype: 数据类型,应为"datetime64"。
示例
在此示例中,我们创建一个日期时间数组,其中包含 5 个在开始日期和结束日期之间均匀分布的日期时间值 -
import numpy as np # 将开始日期和结束日期转换为 datetime64 start_date = np.datetime64('2024-08-01') end_date = np.datetime64('2024-08-10') # 计算开始日期和结束日期之间的天数差 date_range = np.arange(start_date, end_date + np.timedelta64(1, 'D')) # 对日期的整数值使用 linspace datetimes = np.linspace(0, len(date_range)-1, num=5, dtype=int) # 映射回原始日期范围 datetime_array = start_date + datetimes.astype('timedelta64[D]') print("包含 5 个点的日期时间数组:", datetime_array)
输出结果如下 -
包含 5 个点的日期时间数组:['2024-08-01' '2024-08-03' '2024-08-05' '2024-08-07' '2024-08-10']
创建时间数组
在 NumPy 中创建时间数组涉及生成与时间相关的值序列,例如小时、分钟或秒,类似于创建日期。
在 NumPy 中,您可以使用 datetime64 和 timedelta64 数据类型创建时间数组。"datetime64"用于表示绝对时间点(例如特定的日期和时间),而"timedelta64"表示持续时间(例如小时或分钟)。通过组合这些类型,您可以创建表示特定时刻或间隔的时间值数组。
示例
以下示例生成一个从午夜开始到中午结束的时间数组,每个元素代表一个特定的小时 -
import numpy as np # 定义开始和结束时间 start_time = np.datetime64('2024-08-01T00:00') end_time = np.datetime64('2024-08-01T12:00') # 创建一个按小时间隔的数组 time_array = np.arange(start_time, end_time, np.timedelta64(1, 'h')) print("时间数组:", 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 # 创建包含日期和时间的 datetime 数组 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("包含日期和时间的日期时间数组: ", datetimes)
结果如下 -
包含日期和时间的日期时间数组: ['2024-08-01T08:00:00' '2024-08-02T12:30:00' '2024-08-03T16:45:00']