NumPy - 与日期时间的向量化操作
NumPy 与日期时间的向量化操作
NumPy 中的向量化操作允许您对整个数据数组执行操作,而无需显式循环。
在处理日期时间数据时,NumPy 的向量化操作使您能够一次性对整个日期时间值数组执行基于时间的计算,而无需手动遍历每个元素。
使用 datetime64 类型,您可以对日期时间数组执行各种算术和比较操作,例如添加或减去时间间隔、比较日期,或执行条件操作。
添加或减去时间间隔
与日期时间数据最常见的操作之一是添加或减去时间间隔。NumPy 允许您以向量化方式执行这些操作,这意味着您可以一次性向整个日期时间值数组添加或减去时间差。
要添加或减去时间间隔,请使用 timedelta64 对象,该对象表示时间差。此对象可以添加到 datetime64 对象中或从中减去,以按指定间隔移动日期或时间。
示例
在本示例中,我们向日期时间数组中的每个日期添加 5 天 −
import numpy as np # 定义一个日期时间数组 dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[D]') # 定义 5 天的时间差 time_delta = np.timedelta64(5, 'D') # 将时间差添加到日期时间数组 new_dates = dates + time_delta print(new_dates)
以下是获得的结果 −
['2024-01-06' '2024-01-07' '2024-01-08']
减去日期并计算差异
另一个常见操作是计算两个日期之间的差异,这将生成一个 timedelta64 对象。这在需要查找两个时间点之间的时间差异时非常有用,例如两个日期之间的天数。
在 NumPy 中,您可以将一个日期时间数组从另一个数组中减去,以获得表示数组中对应日期之间差异的时间差数组。
示例
在本示例中,我们计算日期时间数组中两个日期之间的差异 −
import numpy as np # 定义两个日期时间数组 dates1 = np.array(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[D]') dates2 = np.array(['2024-01-04', '2024-01-05', '2024-01-06'], dtype='datetime64[D]') # 减去数组以获得差异 time_diff = dates2 - dates1 print(time_diff)
输出将显示以天为单位的不同 −
[3 3 3]
以向量化方式比较日期
NumPy 允许您对日期时间数组执行逐元素比较,从而使您能够基于时间条件过滤或分析数据。向量化比较操作可用于将日期时间值与固定时间点进行比较,或相互比较。
您可以使用标准比较运算符(如 >、<、>=、<=、== 和 !=)比较日期时间数组,这些运算符将返回一个布尔数组,指示每个元素是否满足条件。
示例
在本示例中,我们使用向量化比较过滤出大于特定日期的日期 −
import numpy as np
# 定义一个日期时间数组
dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[D]')
# 定义过滤条件(日期大于 '2024-01-02')
filtered_dates = dates[dates > np.datetime64('2024-01-02')]
print(filtered_dates)
这将产生以下结果 −
['2024-01-03']
使用 Timedelta 数组的向量化操作
除了处理 datetime 数组外,您还可以对 timedelta64 数组执行向量化操作,这些数组表示 datetime 值之间的差异。这些操作在处理持续时间或时间间隔时非常有用。
您可以对 timedelta 数组执行算术运算,例如加法或减法,以计算多个时间间隔之间的总持续时间,或者将它们与其他时间间隔进行比较。
示例
在本示例中,我们将两个 timedelta 数组相加以获取总持续时间 −
import numpy as np # 定义两个 timedelta 数组 delta1 = np.array([np.timedelta64(5, 'D'), np.timedelta64(10, 'D')], dtype='timedelta64[D]') delta2 = np.array([np.timedelta64(2, 'D'), np.timedelta64(3, 'D')], dtype='timedelta64[D]') # 将 timedelta 数组相加 total_delta = delta1 + delta2 print(total_delta)
以上代码的输出如下 −
[ 7 13]
处理不同的时间单位
NumPy 支持多种时间单位,包括年、月、天、小时、分钟和秒。您可以根据需要对不同时间单位的 datetime 数组执行向量化操作。
这在处理跨越多个时间尺度的数据或需要在不同单位之间转换时特别有用。
示例
在本示例中,我们处理一个 datetime 数组和一个具有不同时间单位的 timedelta 数组 −
import numpy as np # 定义一个 datetime 数组 dates = np.array(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[D]') # 定义一个以小时为单位的时间差数组 timedelta = np.array([np.timedelta64(10, 'h'), np.timedelta64(5, 'h'), np.timedelta64(20, 'h')]) # 将 timedelta 数组添加到 datetime 数组 new_dates = dates + timedelta print(new_dates)
执行以上代码后,我们得到以下输出 −
['2024-01-01T10' '2024-01-02T05' '2024-01-03T20']