6-Python中的日期与时间数据(介绍时序数据、datetime模块介绍、字符串与时间互换)
一、什么是时间序列?
时间序列(Time Series)是一种重要的结构化数据形式,在多个时间点观察或测量到的任何事物都可以形成一段时间序列,可分为以下两种:
- 定期的时间序列:数据根据某种规律定期出现(例如:每10秒、每1分)
- 不定期的时间序列:数据之间并没有固定的时间单位或是单位之间的偏移量
二、时间序列的类型有哪些?
时间序列数据的类型主要取决于具体的应用场景,一般可分为3种:
- 时间戳(Timestamps):即特定的时刻,如2020年1月1日14时12分34秒
- 固定时期(Fixed periods):如2020年3月或2020年全年
- 时间间隔(Interval of time):如2020年8月1日到2020年9月1日
三、时间序列类型的处理是否Pandas中独有?
不是Pandas中独有的,Python的基础库中包含了用于日期(date)和时间(time)数据的数据类型,主要用到的模块有datetime和time。
但是Pandas提供了一组标准的时间序列处理工具和数据算法,如切片、切块、聚合、对定期/不定期的时间序列进行重采样等。
四、datetime模块
datetime模块中的数据类型如下:
类型 | 说明 |
date | 以公历形式存储日历日期(年、月、日) |
time | 将时间存储为时、分、秒、毫秒 |
datetime | 存储日期和时间,即date和time的结合 |
timedelta | 两个datetime值之间的差(日、秒、毫秒) |
其中:datetime.datetime简称为datetime,是最为常用的数据类型。
例:查看当前的日期与时间(记录到秒),为datetime类型:
>>> from datetime import datetime >>> now = datetime.now() >>> now datetime.datetime(2020, 8, 8, 17, 10, 19, 19020) #可使用如下方式查看年、月、日、时、分、秒 >>> x = [now.year,now.month,now.day,now.hour,now.minute,now.second] >>> x [2020, 8, 8, 17, 10, 19]
两个datetime对象之间的时间差(日、秒、毫秒)为timedelta类型
>>> delta = now - datetime(2020,1,14) >>> delta datetime.timedelta(days=207, seconds=61819, microseconds=19020) #所以可以通过如下方式查看日、秒、毫秒 >>> y = [delta.days,delta.seconds,delta.microseconds] >>> y [207, 61819, 19020]
五、字符串和datetime的互换
字符串与datetime之间通常需要进行转换,有如下几种方式:
- Python标准库函数:
- 日期--->字符串:str或strftime
- 字符串--->日期:datetime.striptime
- 第三方库函数:
time模块中字符串与时间的互换这里也可以参考另一篇博文【python小题目汇总的第一题】
1)日期----->字符串
例:使用str将日期转换成字符串
>>> stamp = datetime(2020,8,8) >>> str(stamp) '2020-08-08 00:00:00'
那么如何对datetime的格式进行更改呢,在这就设计到了对datetime格式的定义:
符号 | 说明 |
%Y | 4位数的年份 |
%y | 2位数的年份 |
%m | 2位数的月 |
%d | 2位数的日 |
%H | 24小时的时 |
%I | 12小时的时 |
例:使用strftime将日期转换成字符串,并设置格式
>>> stamp.strftime('%y-%m-%d') '20-08-08' >>> stamp.strftime('%Y-%m-%d') '2020-08-08'
2)字符串----->日期
例:使用strptime将字符串转换成日期,需要传入格式
需要注意的是:此处的格式不可随便设置,应该与字符串中的格式一致
>>> value = '2020-1-14' #此时以下将会报错 >>> datetime.strptime(value,'%y-%m-%d') ValueError: time data '2020-1-14' does not match format '%y-%m-%d' >>> datetime.strptime(value,'%Y-%m-%d') datetime.datetime(2020, 1, 14, 0, 0)
可以strptime结合使用列表推导式将多个字符串转换成日期
>>> values = ['2020-5-23','2018-4-2'] >>> [datetime.strptime(value,'%Y-%m-%d') for value in values] [datetime.datetime(2020, 5, 23, 0, 0), datetime.datetime(2018, 4, 2, 0, 0)]