Numpy 时间日期的表示和计算
阅读更多:Numpy 教程
Numpy datetime64 的基本表示
Numpy 中的 datetime64 类型用于表示时间和日期。其格式为 YYYY-MM-DD 或者 YYYY-MM-DDTHH:mm:ss.ssssss。其中,YYYY 表示年份,MM 表示月份,DD 表示天数,HH 表示小时,mm 表示分钟,ss 表示秒数,ss.ssssss 表示毫秒数。下面是一些 datetime64 类型的示例:
import numpy as np
date1 = np.datetime64('2022-01-01')
date2 = np.datetime64('2022-01-01 12:30:00.000001')
我们还可以使用字符串格式化指令来创建 datetime64 类型,也可以使用浮点数表示相对于 Unix 时间戳的时间戳:
date3 = np.datetime64('2022-01', 'M') # 从一个 YYYY-MM 格式的字符串创建
date4 = np.datetime64('2022-01-01T12:30:00.000001', 'ms') # 使用毫秒戳创建
date5 = np.datetime64(1641040800, 's') # 从一个 Unix 时间戳创建
我们可以通过 dtype 属性来查看一个数组中的元素类型:
arr = np.array([date1, date2, date3, date4, date5])
arr.dtype # 输出 dtype('datetime64[ns]')
注意,在 datetime64 类型中,中括号中的 ns/ms 等表示精度的参数可以指定为:
Y: 年M: 月D: 日h: 时m: 分s: 秒ms: 毫秒us: 微秒ns: 纳秒ps: 皮秒fs: 飞秒as: 阿托秒
计算时间差
可以使用减法 (-) 运算符来计算两个 datetime64 类型的时间之差。例如:
delta1 = date2 - date1 # 时间差为 12.500000 秒
delta2 = np.datetime64('2022-01-01T12:30:00.000001') - np.datetime64('2022-01-01T12:30:00.000005')
可以得到 delta1 的数据类型为 numpy.timedelta64,它可以表示时间差的不同精度级别,例如:
delta3 = np.timedelta64(1, 'D') # 一天
delta4 = np.timedelta64(5, 'h') # 五个小时
delta5 = np.timedelta64(10000, 'ms') # 10000 毫秒
除了直接使用 np.timedelta64 创建时间差外,我们还可以使用 astype 方法将 datetime64 类型转换为 timedelta64 类型:
timedelta1 = np.datetime64('2022-01-01T12:30:00.000001') - np.datetime64('2022-01-01')
timedelta2 = timedelta1.astype('timedelta64[D]') # 获取时间差的日期部分
timedelta3 = timedelta1.astype('timedelta64[s]') # 获取时间差的秒数
增加或减少时间
Numpy 提供了一些函数来增加或减少时间间隔,例如:
date1_plus_day = np.datetime64('2022-01-01') + np.timedelta64(1, 'D') # 加一天
date2_minus_hour = np.datetime64('2022-01-01T12:30:00.000001') - np.timedelta64(1, 'h') # 减一小时
我们还可以使用 np.datetime64 函数中的 months 参数来增加或减少月份:
date1_plus_month =np.datetime64('2022-01-01') + np.timedelta64(1, 'M') # 加一个月
date2_minus_month = np.datetime64('2022-01-01T12:30:00.000001') - np.timedelta64(1, 'M') # 减一个月
需要注意的是,months 参数的精确含义是根据日历月份而不是简单的 30 天计算的,因此该参数的含义在不同的情况下会有所不同,具体可以参考官方文档。
格式化输出时间
Numpy 提供了一些函数来将 datetime64 类型的时间转换为字符串,例如:
date_string1 = np.datetime_as_string(date1, unit='D') # 转换为 YYYY-MM-DD 格式的字符串
date_string2 = np.datetime_as_string(date2, unit='s') # 转换为 YYYY-MM-DDTHH:mm:ss 格式的字符串
这里的 unit 参数表示输出字符串的粒度单位,可以设置为 Y/M/W/D/h/m/s/ms/us/ns 等。
我们还可以使用 strftime 方法来进行更为自由灵活的时间格式化操作。例如:
date_string3 = date2.astype('O').strftime('%Y年%m月%d日 %H:%M:%S.%f') # 转换为中文日期时间字符串
这里的 %Y 表示四位数的年份,%m 表示两位数的月份,%d 表示两位数的日期,%H 表示两位数的小时,%M 表示两位数的分钟,%S 表示两位数的秒数,%f 表示六位数的毫秒数。更多的格式化操作可以参考 Python 的官方文档。
总结
本文介绍了 Numpy 中的 datetime64 类型的基本表示和计算方式,包括时间差的计算、时间的增减、时间的格式化输出等。Numpy 的时间日期类型灵活多样、使用方便,是数据分析中不可或缺的组成部分。
极客教程