pands 时间序列 之日期和时间数据类型及工具

Python 标准库包含用于日期(date)和时间(time)数据的数据类型,而且还有日历方面的功能,我们主要会用到datetime、time以及calendar模块。datetime.datetime 是用的最多的数据类型:


In [1]: from datetime import datetime

In [2]: now = datetime.now()

In [3]: now
Out[3]: datetime.datetime(2018, 4, 1, 9, 29, 4, 258841)

In [4]: now.year, now.month,now.day
Out[4]: (2018, 4, 1)

datetime 以毫秒形式存储日期和时间。datetime.timedelta 表示两个 datetime 对象之间的时间差,也可以给初始时间加上或者减去一个或者多个timedelta,来产生一个新的 datetime


In [8]:from datetime import timedelta

In [9]: delta = datetime(2011,1,7) - datetime(2008,6,24,8,15)

In [10]: delta
Out[10]: datetime.timedelta(926, 56700)       #分别表示天数 和秒数

In [11]: delta.days  
Out[11]: 926 

In [12]: delta.seconds
Out[12]: 56700


In [13]: start = datetime(2011,1,7)

In [14]: start + timedelta(12)
Out[14]: datetime.datetime(2011, 1, 19, 0, 0)

因为datetime 是一种特定的时间表示格式   在使用中为了避免出现错误  我们常常需要将其转换为字符串   这就用到str 或者 strftime 方法:



In [13]: stamp = datetime(2011,1,3)

In [14]: str(stamp)
Out[14]: '2011-01-03 00:00:00'

In [16]: stamp.strftime('%Y-%m-%d')
Out[16]: '2011-01-03'

datetime.strptime() 是strftime 的相反方法  可以实现字符串向 datetime 的转换:

In [18]: value = '2011-01-03'

In [19]: datetime.strptime(value,'%Y-%m-%d')         #每次都要编写格式定义
Out[19]: datetime.datetime(2011, 1, 3, 0, 0)

从上面可以知道 每次都要编写格式定义事非常麻烦的事情, 为了简单起间  可以使用dateutil 这个第三方包中的parser.parse 方法:



In [21]: from dateutil.parser import parse

In [23]: parse('2011-01-03')       #传入 dayfirst =True 可以让日出现在月前面
Out[23]: datetime.datetime(2011, 1, 3, 0, 0)


#注意parser 是一个实用但是不完美的工具 ,比如传入单个数据 解析的结果无规律

In [38]: parse('12')
Out[38]: datetime.datetime(2018, 4, 12, 0, 0)


In [39]: parse('22')
Out[39]: datetime.datetime(2018, 4, 22, 0, 0)


In [40]: parse('42')
Out[40]: datetime.datetime(2042, 4, 1, 0, 0)


parse 虽然处理单个日期比较方便  但是在DateFrame 里面 处理日期列或者索引时候 (成组的日期)就没有办法了,这时候 使用 pandas  中的 to_datetime  就可以迅速解决



In [31]: import pandas as pd

In [32]: datestrs = ['4/2/2011','8/6/2013']

In [33]: pd.to_datetime(datestrs)
Out[33]: DatetimeIndex(['2011-04-02', '2013-08-06'], dtype='datetime64[ns]', freq=None)



In [34]: idx = pd.to_datetime(datestrs+[None])           #它还可以处理缺失值

In [35]: idx           #NaT 是pandas中时间戳数据的NA值
Out[35]: DatetimeIndex(['2011-04-02', '2013-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)  

In [36]: pd.isnull(idx)
Out[36]: array([False, False,  True])



datetime 格式定义



格式  含义  备注  
%a  本地(locale)简化星期名称  
%A  本地完整星期名称  
%b  本地简化月份名称  
%B  本地完整月份名称  
%c  本地相应的日期和时间表示  
%d  一个月中的第几天(01 - 31)  
%H  一天中的第几个小时(24小时制,00 - 23)  
%I  第几个小时(12小时制,01 - 12)  
%j  一年中的第几天(001 - 366)  
%m  月份(01 - 12)  
%M  分钟数(00 - 59)  
%p  本地am或者pm的相应符  
%S  秒(01 - 61)  
%U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。  
%w  一个星期中的第几天(0 - 6,0是星期天)  
%W  和%U基本相同,不同的是%W以星期一为一个星期的开始。  
%x  本地相应日期  
%X  本地相应时间  
%y  去掉世纪的年份(00 – 99)  
%Y  完整的年份  
%Z  时区的名字(如果不存在为空字符)  
%%  ‘%’字符 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值