datetime64基础 Numpy中可以方便的将字符串转化成日期类型datetime64(python中有一个日期时间库datetime),datetime64是带单位的时间类型,单位如表:
日期单位代码含义时间单位代码含义Y年h小时M月m分钟W周s秒D天ms毫秒 利用字符串创建datetime64类型,默认情况下,numpy 会根据字符串自动选择对应的单位。 import numpy as np a = np.datetime64('2020-03-01') print(a, a.dtype) b = np.datetime64('2020-03-08 20:00') print(b, b.dtype)输出
2020-03-01 datetime64[D] #Numpy默认的单位是D(天) 2020-03-08T20:00 datetime64[m] #Numpy默认的单位是m(分钟) 从字符串创建datatime64类型时,可以强制指定使用的单位。 import numpy as np a = np.datetime64('2020-03','D') print(a,a.dtype) a = np.datetime64('2020-03', 'Y') print(a, a.dtype) # 2020 datetime64[Y]输出:
2020-03-01 datetime64[D] #单位强制变成了 D 2020 datetime64[Y] #单位强制变成的 Y实际上,2020-03和2020-03-01代表的是同一天的时间
print(np.datetime64('2020-03') == np.datetime64('2020-03-01')) print(np.datetime64('2020-03') == np.datetime64('2020-03-02'))输出
True False 由字符串创建datetime64数组时,如果单位不统一,则一律转化成其中最小的单位 import numpy as np a = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype = 'datetime64') print(a)输出:
['2020-03-01T00:00' '2020-03-08T00:00' '2020-03-08T20:00'] 利用arange()创建datetime64数组,可用于生成日期范围。 import numpy as np a = np.arange('2020-08-01', '2020-08-10', dtype = np.datetime64) print(a, a.dtype)输出:
['2020-08-01' '2020-08-02' '2020-08-03' '2020-08-04' '2020-08-05' '2020-08-06' '2020-08-07' '2020-08-08' '2020-08-09'] datetime64[D] datetime64和timedelta64运算 timedelta64 表示两个 datetime64 之间的差。timedelta64 也是带单位的,并且和相减运算中的两个 datetime64 中的较小的单位保持一致。 import numpy as np a = np.datetime64('2020-03-08') - np.datetime64('2020-03-07') print(a, a.dtype) a = np.datetime64('2020-03') + np.timedelta64(20, 'D') print(a, a.dtype)输出:
1 days timedelta64[D] 2020-03-21 datetime64[D] numpy.datetime64 与 datetime.datetime 相互转换 import numpy as np import datetime dt = datetime.datetime(year=2020, month=6, day=1, hour=20, minute=5, second=30) dt64 = np.datetime64(dt, 's') print(dt64, dt64.dtype) # 2020-06-01T20:05:30 datetime64[s] dt2 = dt64.astype(datetime.datetime) print(dt2, type(dt2)) # 2020-06-01 20:05:30 <class 'datetime.datetime'>输出:
2020-06-01T20:05:30 datetime64[s] 2020-06-01 20:05:30 <class 'datetime.datetime'>datetime64的应用 为了允许在只有一周中某些日子有效的上下文中使用日期时间,Numpy中包含“busday”(工作日)功能。 numpy.busday_offset(dates, offsets, roll=‘raise’, weekmask=‘1111100’, holidays=None, busdaycal=None, out=None) 参数含义: dates:要处理的日期数组 offsets:偏移量数组 roll: {‘raise’, ‘nat’, ‘forward’, ‘following’, ‘backward’, ‘preceding’, ‘modifiedfollowing’, ‘modifiedpreceding’}, 可选参数。如何处理非有效日期的日期。默认值为‘raise’。(forward:表示向未来方向;backward:表示向过去方向。) 如果当前日期不是工作日,默认报错。可以指定forward或backward避免报错。
import numpy as np a = np.busday_offset('2020-07-11', offsets=1) # 7.11为周六 print(a) #结果报错 a = np.busday_offset('2020-07-10', offsets=1) print(a) # 2020-07-13 a = np.busday_offset('2020-07-11', offsets=0, roll='forward') b = np.busday_offset('2020-07-11', offsets=0, roll='backward') print(a) print(b) a = np.busday_offset('2020-07-11', offsets=1, roll='forward') b = np.busday_offset('2020-07-11', offsets=1, roll='backward') print(a) print(b)输出:
2020-07-13 2020-07-13 2020-07-10 2020-07-14 2020-07-13