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)

results matching ""

    No results matching ""