时间类型数据在生活中非常常见,经济、金融、物理等方面都会使用到,在观测数据过程中,对于时间序列数据常常使用的有三种:
时间戳 :具体的时刻
时间间隔 :由开始和结束的时间戳表示
固定的时间区间 :比如说2020年一整年
Python中包含了日期和时间数据的类型,也包括日历相关的功能,其中有datetime、time和calendar模块。这里主要梳理datetime的基本用法和字符串时间转换的相关知识点。
1 datetime基本知识点
1.1 存储精细度
datetime存储了日期,也存储到了细化到微秒的时间,具体可以看如下代码,在得出的结果中,从左到右分别是年、月、日、时、分、秒、微秒:
1.2 计算时间差
datetime的时间差可以通过两个datetime对象加减操作得到,得出的结果是timedelta类型,操作如下代码所示,通过两个datetime对象进行相减操作,得出时间间隔my_delta的结果,对应两个参数分别是days和seconds。
1.3 加减求另一个时间
一个datetime对象可以和一个timedelta时间间隔相加减得到另一个datetime对象,这种加减可以是timedelta的整数倍,示例如下所示。
有关datetime模块中数据类型包括以下:
类型 | 描述 |
---|---|
date | 使用公历存储日期(年、月、日) |
time | 将时间存储为小时、分钟、秒、微妙 |
datetime | 存储日期和时间 |
timedelta | 存储时间间隔 |
tzinfo | 存储时区(北京是东八区),具体使用可以参考tzinfo的用法 |
2 日期与字符串的转换
2.1 时间类型转为字符串
datetime通过strftime方法将datetime类型进行特定格式的字符串转换,举例如下代码所示。
从上述代码可以看出,strftime是通过%方式进行特定时间字符串格式的设定,特定格式的的转换形式有以下几种。
类型 | 描述 |
---|---|
%Y | 四位格式的年份 |
%y | 两位格式的年份 |
%m | 两位格式的月份 |
%d | 两位格式的日期 |
%H | 小时,24小时制 |
%I | 小时,12小时制 |
%M | 分钟,两位格式 |
%S | 秒 |
%w | 星期日期,[0(周日),6] |
%U | 一年总计星期数,周日为第一天,一年中第一个周日前的星期为第0周 |
%W | 一年总计星期数,周一为第一天,一年中第一个周一的星期为第0周 |
%z | 格式为+HHMM或-HHMM的UTC时区偏移,没有时区则为空 |
%F | %Y-%m-%d的简写 |
%D | %m / % d / %y的简写 |
2.2 字符串转为时间数据类型
字符串转换为日期的方式是比较多的,这里介绍三种方式
第一种: 使用datetime中的 strptime 方法,具体使用如代码所示
通过代码可以看出,使用datetime进行转换,在参数中需要对应写入字符串的时间格式才能进行转换,这样对于已知的格式可以说很方便,而每次进行格式编写确实带来了许多的不便,这时可以考虑第二种方法
第二种 :使用 parse 方法
parse方法来自与dateutil包,如果已经安装了pandas的包,这个包默认已经安装了。parse方法对于常见的可理解的字符串日期都可以自动转换成datetime类型。考虑到国际场合下,有的时间是日期在月份之前,比如2/12/2020为2020年12月2日,这种转换可以加入dayfirst参数进行备注,方便识别,具体举例如下。
第三种 : pandas中面向日期数组的处理( to_datetime 方法)
在dataFrame中,轴索引和列都可以使用to_datetime方法将字符串数组进行转换,在进行转换的过程中也可以进行空缺值的识别,空缺值将使用NaT(Not a Time)表示,具体举例如下: