Python标准库包含用于日期(date)和时间(time)数据的数据类型,而且有日历方面的功能。
我们主要使用datetime、time以及calendar模块。而datetime.datetime是用的最多的数据类型
from datetime import datetime
now = datetime.now()
now
datetime.datetime(2018, 1, 16, 5, 27, 25, 63140)
获取年,月,日
now.year, now.month, now.day
datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差
delta = datetime(2011, 1, 7) - datetime(2008, 6, 24, 8, 15)
datetime.timedelta(926, 56700)
因此,获取时间差的天数和秒数
delta.days
delta.seconds
给datetime对象加上(或减去)一个或多个timedelta,会产生新对象
from datetime import timedelta
start = datetime(2011, 1, 7)
start + timedelta(12)
datetime.datetime(2011, 1, 19, 0, 0)
start - 2 * timedelta(12)
datetime.datetime(2010, 12, 14, 0, 0)
字符串和datetime的相互转换
利用str或strftime方法(传入一个格式化字符串),datetime对象和pandas的Timestamp对象可以被格式化为字符串
stamp = datetime(2011, 1, 3)
str(stamp)
'2011-01-03 00:00:00'
stamp.strftime('%Y-%m-%d')
'2011-01-03'
datetime.strptime可以用格式化编码将字符串转换为日期
value = '2011-01-03'
datetime.strptime(value, '%Y-%m-%d')
datetime.datetime(2011, 1, 3, 0, 0)
datestrs = ['7/6/2011', '8/6/2011']
[datetime.strptime(x, '%m/%d/%Y') for x in datestrs]
datetime.strptime是通过已知格式进行日期解析的最佳方式。
对于一些常见的日期格式,可以使用dateutil包中的parser.parse方法
from dateutil.parser import parse
parse('2011-01-03')
datetime.datetime(2011, 1, 3, 0, 0)
parse('Jan 31, 1997 10:45 PM')
datetime.datetime(1997, 1, 31, 22, 45)
在国际通用的格式中,日通常出现在月前面,因此传入dayfirst=True
parse('6/12/2011', dayfirst=True)
datetime.datetime(2011, 12, 6, 0, 0)
pandas通常是用于处理成组日期的,不管日期是DataFrame的轴索引还是列。
to_datetime方法可以解析多种不同的日期表示形式,对标准日期格式(如ISO8601)解析非常快
pd.to_datetime(datestrs)
DatetimeIndex(['2011-07-06', '2011-08-06'], dtype='datetime64[ns]', freq=None)
to_datetime处理缺失值(None、空字符串等)
idx = pd.to_datetime(datestrs + [None])
DatetimeIndex(['2011-07-06', '2011-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)
NaT(not a Time)是pandas中时间戳数据的NA值
pd.isnull(idx)