python处理时间序列datetime、dateutil、to_datetime

不论是数据分析还是其它方面,对于时间格式的处理司空见惯,尤其是金融、气象、调查等方面,时间的应用是无处不在的。

利用python来处理时间是十分方便的一种方式。

python的datetime、dateutil模块和pandas的to_datetime都能够对时间进行很好的处理。各自也有各自的方法。

对于时间的处理大多数都是:

                        时间格式->str    、    str->时间格式

python或利用pandas在读取某列数据时,除非能明确确定数据的类型,否则它都会按照最安全的方式来读取。一旦有非法数据或异常数据,它都会改变数据类型。

例子:

from datetime import datetime

now = datetime.now()
print('年:{},月:{},日:{}'.format(now.year,now.month,now.day))
年:2018,月:4,日:25
diff = datetime(2017,3,4,17) - datetime(2017,2,18,15)
print(type(diff))
print(diff)
print('历经了{}天,{}秒'.format(diff.days,diff.seconds))      #两个都是总计时
    #时间格式类型
14 days, 2:00:00
历经了14天,7200秒
字符串和datetime的转换:
datetime -> str
str(datetime_obj)
datetime.strftime()
str -> datetime
datetime.strptime() #需要指定时间表示形式
dateutil.parser.parse() #可以解析绝大部分事件表示形式(很好用)
pd.to_datetime() #可以处理缺失值和空字符串


★datetime -> str:

str()

dt_obj = datetime(2017,3,4)
str_obj = str(dt_obj)            #python惯用的强制转换方法
print(type(str_obj))
print(str_obj)

2017-03-04 00:00:00
datetime.strftime()                #str    format        time
str_obj2 = dt_obj.strftime('%d-%m-%Y')	#%Y/%m%d  中间的连接符随便换
print(str_obj2)
04-03-2017

★str -> datetie

strptime                                #str       parse    time

dt_str = '2017-02-18'	#str p time  p:parse
dt_obj2 = datetime.strptime(dt_str,'%Y-%m-%d')	#解析时连接符不能改变
print(type(dt_obj2))
print(dt_obj2)

2017-02-18 00:00:00

dateutil.parser.parse #相对于上面连接符和指定格式,这个方法-/都行,也不用指定格式

from dateutil.parser import parse
dt_str2 = '2017/02/18'		#02-18-2017 也行的 很强大
dt_obj3 = parse(dt_str2)
print(type(dt_obj3))
print(dt_obj3)

2017-02-18 00:00:00

pd.to_datetime

import pandas as pd
s_obj = pd.Series(['2017/02/18','2017/02/19','2017-02-25','2017-02-26'],name='course_time')
print(s_obj)
0    2017/02/18
1    2017/02/19
2    2017-02-25
3    2017-02-26
Name: course_time, dtype: object
s_obj2 = pd.to_datetime(s_obj)	#可以处理其中空字符串
print(s_obj2)
0   2017-02-18
1   2017-02-19
2   2017-02-25
3   2017-02-26
Name: course_time, dtype: datetime64[ns]
处理缺失值
s_obj3 = pd.Series(['2017/02/18','2017/02/19','2017-02-25','2017-02-26']+[None],name='course_time')
print(s_obj3)
s_obj4 = pd.to_datetime(s_obj3)
print(s_obj4)
0    2017/02/18
1    2017/02/19
2    2017-02-25
3    2017-02-26
4          None
Name: course_time, dtype: object
0   2017-02-18
1   2017-02-19
2   2017-02-25
3   2017-02-26
4          NaT
Name: course_time, dtype: datetime64[ns]        #可以看到两次的格式改变了

提醒一下:时间空值输出为NaT  数值为NaN

总结一下:在str转时间格式或是时间格式转str时,有很多种方法,一定要合理的使用,不要搞混了,使用起来也很方便。dateutil模块很强大,它几乎包括了所有常用的时间格式。掌握它很有必要。



你可能感兴趣的:(数据挖掘,python基础)