利用str或strftime方法(传入一个格式化字符串),datetime对象和pandas的Timestamp对象可以被格式化为字符串:
In [111]: stamp=datetime(2011,1,3)
将datetime对象转换为字符串
In [112]: str(stamp)
Out[112]: '2011-01-03 00:00:00'
使用strftime定义展示格式
In [113]: stamp.strftime('%Y-%m-%d')
Out[113]: '2011-01-03'
datetime.strptime:将字符串转换为格式化编码
In [114]: value='2011-01-03'
In [115]: datetime.strptime(value,'%Y-%m-%d')
Out[115]: datetime.datetime(2011, 1, 3, 0, 0)
In [117]: datestrs=['7/6/2011','8/6/2011']
In [118]: [datetime.strptime(x,'%m/%d/%Y') for x in datestrs]
Out[118]: [datetime.datetime(2011, 7, 6, 0, 0), datetime.datetime(2011, 8, 6, 0, 0)]
Datetime.strptime是通过已知格式进行日期解析的最佳方式。但是每次都要编写格式定义是很麻烦的事情,尤其是对于一些常见的日期格式。在这种情况下,可以用dateutil这个第三方包中的parser.parse方法:
In [119]: from dateutil.parser import parse
In [120]: parse('2011-01-03')
Out[120]: datetime.datetime(2011, 1, 3, 0, 0)
dateutil可以解析几乎所有人类能够理解的日期表示形式(中文不行):
In [121]: parse('Jan 31,1997 10:45 PM')
Out[121]: datetime.datetime(2018, 1, 31, 22, 45)
dayfirst=True:解决日在月前面的问题
在国际通用的格式中,日通常出现在月的前面,传入dayfirst=True即可解决 问题:
In [122]: parse('6/12/2011',dayfirst=True)
Out[122]: datetime.datetime(2011, 12, 6, 0, 0)
Pandas通常是用于处理成组日期的,不管这些日期是DataFrame的轴索引还是列。To_datetime方法可以解析多种不同的日期表示形式。对标准日期格式(如ISO8601)的解析非常快。
In [123]: datestrs
Out[123]: ['7/6/2011', '8/6/2011']
In [124]: pd.to_datetime(datestrs)
Out[124]: DatetimeIndex(['2011-07-06', '2011-08-06'], dtype='datetime64[ns]', freq=None)
In [125]: idx=pd.to_datetime(datestrs+[None])
In [126]: idx
Out[126]: DatetimeIndex(['2011-07-06', '2011-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)
In [127]: idx[2]
Out[127]: NaT
In [128]: pd.isnull(idx)
Out[128]: array([False, False, True], dtype=bool)
NaT(Not a Time)是pandas中时间戳数据的NA值。
「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」
「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」