开发者学堂课程【Python 常用数据科学库:时间操作】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/546/detail/7487
时间操作
内容介绍
一、在 python 当中操作时间
二、在 pandas 中操作时间
一、在 Python 中操作时间
1、第一步先引进 datetime 包,在包下指定一些时间的变量。比如可以直接指定年月日时分,直接打 dt 格式不标准,只要 print 一下就是标准形式,年月份是-连接,时分是:连接。
import datetime
dt = datetime.datetime(year=2017,month=11, day=24, hour=10, minute=30)
dt
二 、在 pandas 中操作时间
1、Pandas 导进来,首先构造最基本的时间结构,pandas 里有一个 Time stamp,就是这样一个时间戳,先把它调出来,指定时间2017年 11月24号,打印一下
import pandas as pd
ts =pd.Timestamp('2017-11-24’)
ts
这样它就出现了当前的一个时间,2017年11月24号的一个时间。
2、对于 pandas 时间构造出的变量来说,它都有哪些属性可以去利用。可以调时间ts.day、ts.month, 除此之外,还可以进行加减法的操作,比如说用当前这个时间,可以指定一个时间 5days
ts+pd.Timedelta('5 days')
执行一下,原来是11月24号,现在是11月29号,也就是说在 pandas 当中,时间是可以进行一系列计算的。
3、其他形式构造时间, to_datetime 是比较常用的,里面写上当前的时间执行一下
pd.to_datetime('2017-11-24')
执行一下,它和上面的结果是完全一样的。所以说在构造时间的时候,有很多种方式把时间构造出来,可以换种写法24/11/2017,这样也能出来。
4、时间戳的用处。用时间戳去做数据,比如说指定一个时间戳,一般都是写成 Series 结构。里面传进来当前的一系列时间
s= pd.Series(['2017-11-24 00:00:00','2017-11-25 00:00:00','2017-11-26 00:00:00' ]
S
做出来的结构之后,直接打印出来是这样的
它是一个 object 类型。但是 In[12] 中的时间还是字符串,字符串利用起来是不太方便的,在 pandas 当中最好把它转换成一个 datatime 格式
ts=pd.to_datetime(s)
ts
原来是 object,现在它就是一个 date time 类型了,对于 date time 类型,可以调它的很多属性,比如说可以调 hour 小时:
ts.dt.hour
5、在构造 Series 结构的时候,可以直接指定 datatime 类型。要构造一个时间序列,需要知道起始日期,比如说从11月24号开始,然后构造10个数据,间隔是12小时
pd.Series(pd.date_range(start='2017-11-24',periods = 10,freq = '12H')
然后看一下结果
这样就把 datetime 格式构造出来了,可以按照自己的方式直接在 pandas 的 series结构当中,把时间序列构造出来。
6、时间序列做出来之后,可以用这个序列做一些事情,尤其是做可视化展示,做画图,这些操作是比较常用的。接下来对真实数据执行这样的操作。首先读进来这样的数据
data = pd.read_csv(’./data/flowdata.csv')
data.head
这里还是字符串,需要对它进行转换,转换成标准时间格式。data 中指定 time 列,指定 to_ datetime,指定完之后,把 data 当中 time 再进行指定,指定完之后相当于做了一个变换,做完变换之后,让数据去设置一个索引 data,用 Time 这个列来当新的索引
data['Time'] = pd. to_datetime(data[' Time'])
data = data.set_index('Time')
data
执行一下
转换之后,得到一个时间序列的数据,并且这个数据按照时间来 当成了索引。就是说一般情况下,当有一个时间序列数据之后,通常都是按照这种方式来执行这样的操作。
7、data 的 index 值
刚才做看起来有些麻烦,还有这样的操作,可以直接指定 index 值是哪一个,然后加上 parse,是不是要解析一下 data 数据,然后给它指定 True 值。
data =pd.read_csv('./data/flowdata.csv', index_col = 0,parse_dates = True)
data. head
执行得到结果
这次和上面执行的结果是完全一样,也就是说这一步操作你可以把数据读进来之后自己执行这样的操作,也可以在编读数据的时候,如果是一个时间序列数据,可以直接把它拿到手。