博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【学习】时间序列分析与处理【时间序列】
阅读量:5217 次
发布时间:2019-06-14

本文共 2469 字,大约阅读时间需要 8 分钟。

时间戳(timestamp),特定的时刻

固定时期(period),如2017年1月或2017年全年

时间间隔(interval), 由起始和结束时间戳表示

实验或过程时间,每个时间点都有相对于特定起始时间的一个度量

1、日期和时间数据类型及工具

from datetime import datetimenow = datetime.now()nowOut[63]: datetime.datetime(2017, 9, 14, 17, 19, 5, 215000)now.year, now.month, now.dayOut[64]: (2017, 9, 14)

datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差

delta = datetime(2017, 9, 14) - datetime(2016, 6, 24, 8, 15)deltadelta.daysdelta.seconds Out[66]: datetime.timedelta(446, 56700) delta.days Out[67]: 446 delta.seconds Out[69]: 56700

可以给datetime对象加上(或减去)一个或多个timedelta,这样会产生一个新对象

from datetime import timedeltastart = datetime(2017, 1, 7)start + timedelta(12)Out[72]: datetime.datetime(2017, 1, 19, 0, 0)start - 2 * timedelta(12)Out[73]: datetime.datetime(2016, 12, 14, 0, 0)

datetime模块中的数据类型

2、 字符串和datetime的相互转换

利用str 或 strftime方法, datetime对象和pandas 的 timestamp对象可以被格式化字符串

stamp = datetime(2017, 1, 3)str(stamp)Out[75]: '2017-01-03 00:00:00'stampOut[76]: datetime.datetime(2017, 1, 3, 0, 0)stamp.strftime('%Y - %m - %d')Out[77]: '2017 - 01 - 03'stamp.strftime('%Y-%m-%d')Out[78]: '2017-01-03'
value = '2017-09-14'datetime.strptime(value, '%Y-%m-%d')Out[86]: datetime.datetime(2017, 9, 14, 0, 0)datestrs = ['7/6/2017', '8/6/2017'][datetime.strptime(x, '%m/%d/%Y') for x in datestrs]Out[88]: [datetime.datetime(2017, 7, 6, 0, 0), datetime.datetime(2017, 8, 6, 0, 0)]

datetime.strptime是通过已知格式进行日期解析的最佳方式。但是是件很麻烦的事情,可以用dateutil这个第三方包中的parser.parse方法

from dateutil.parser import parseparse('2017-09-14')Out[90]: datetime.datetime(2017, 9, 14, 0, 0)

dateutil可以解析几乎所有人类能够理解的日期表示形式,但中文不行

parse('Jan 31, 2017 10:45 PM')Out[91]: datetime.datetime(2017, 1, 31, 22, 45)

在国际通用的格式中,日通常出现在月的前面,传入dayfirst = True 即可解决这个问题

parse('9/12/2017',dayfirst = True)Out[92]: datetime.datetime(2017, 12, 9, 0, 0)

用pandas中 to_datetime方法可以解析多种不同的日期表示形式,对标准日期格式解析非常快

datestrsOut[93]: ['7/6/2017', '8/6/2017']import pandas as pdpd.to_datetime(datestrs)Out[95]: DatetimeIndex(['2017-07-06', '2017-08-06'], dtype='datetime64[ns]', freq=None)

它还可以处理缺失值(None, 空字符串)

idx = pd.to_datetime(datestrs + [None])idxOut[97]: DatetimeIndex(['2017-07-06', '2017-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)
idx[2]Out[98]: NaTpd.isnull(idx)Out[99]: array([False, False,  True], dtype=bool)

NaT(Not a Time)是pandas中时间戳数据的NA值

 

注意:dateutil.parser是一个实用但不完美的工具。会把一些原本不是日期的字符串认作是日期

 

datetime的格式定义

datetime对象还有一些特定于当前环境的格式化选项

 

posted on
2017-09-14 17:51 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/yizhenfeng/p/7521933.html

你可能感兴趣的文章
解决DataSnap支持的Tcp长连接数受限的两种方法
查看>>
Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调
查看>>
ASP.NET MVC5 高级编程-学习日记-第二章 控制器
查看>>
Hibernate中inverse="true"的理解
查看>>
高级滤波
查看>>
使用arcpy添加grb2数据到镶嵌数据集中
查看>>
[转载] MySQL的四种事务隔离级别
查看>>
QT文件读写
查看>>
C语言小项目-火车票订票系统
查看>>
15.210控制台故障分析(解决问题的思路)
查看>>
BS调用本地应用程序的步骤
查看>>
常用到的多种锁(随时可能修改)
查看>>
用UL标签+CSS实现的柱状图
查看>>
mfc Edit控件属性
查看>>
Linq使用Join/在Razor中两次反射取属性值
查看>>
[Linux]PHP-FPM与NGINX的两种通讯方式
查看>>
Java实现二分查找
查看>>
优秀员工一定要升职吗
查看>>
[LintCode] 462 Total Occurrence of Target
查看>>
springboot---redis缓存的使用
查看>>