时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学、经济学、生态学、神经科学、物理学等。在多个时间点观察或测量到的任何事物都可以形成一段时间序列。在进行时间序列问题分析时,通常需要将字符串和datetime类型相互转换,本文分享他们之间相互转换的集中常用方法(主要用到的库有datetime、pandas以及dateutil)。
(一)datetime -> str
datetime类型转成str一般常用的有两种方法:str和传入格式化字符串的strftime方法。
1.str()类型转换
from datetime import datetime
stamp = datetime(2011, 1, 3)
stamp
str(stamp)
stamp.strftime('%Y-%m-%d')
(一)str -> datetime
将str转成日期时间类型有三种常用方法:一个是与strftime互逆的strptime方法、以及dateutil包的parse方法、还有pandas的to_datetime方法。
1.strptime方法
value = '2011-01-03'
datetime.strptime(value, '%Y-%m-%d')
2.dateutil包中的parser.parse方法
from dateutil.parser import parse
parse('2011-01-03')
这个方法还有个很好的地方就是不用你显示的给定编码格式,dateutil可以解析几乎所有人类能够理解的日期表示形式。
parse('Jan 31, 1997 10:45 PM')
在国际通用的格式中,日出现在月的前面很普遍,传入dayfirst=True(默认值为False)即可解决这个问题.
parse('6/12/2011', dayfirst=True)
注意:parser是一个实用但不完美的工具。比如说,它会把一些原本不是日期的字符串认作是日期(比如"42"会被解析为2042年的今天)。
3.pandas包的to_datetime方法
to_datetime方法可以解析多种不同的日期表示形式。对标准日期格式(如ISO8601)的解析非常快:
import pandas as pd
datestrs = ['2011-07-06 12:00:00', '2011-08-06 00:00:00']
pd.to_datetime(datestrs)
它还可以处理缺失值(None、空字符串等):
idx = pd.to_datetime(datestrs + [None])
idx
其中第三个元素为NaT:Not a Time。是pandas中时间戳数据的null值。