转换字符串日期,可能无法用零填充

时间:2018-05-18 13:55:55

标签: python string python-3.x datetime strptime

我从非常规来源获取我的数据和一些日期,因此在字符串日期中存在一些细微差别。最大的区别在于日期混合在一起,当天没有填充零,白天可能会有一个空白区域(在日期2/9/2018的情况下),月份也不会被零填充。我在尝试使用datetime.strptime时遇到“时间数据与格式'%m%d%Y'不匹配的错误。我怎样才能转换一个日期列,其中有这样的细微差别?请参阅代码和示例数据以下

d_o = datetime.datetime.strptime(df['start'][1], '%m %d %Y')
  • 2018年1月26日
  • 2018年1月26日
  • 2018年2月2日
  • 2018年2月2日
  • 2/9/2018
  • 2/9/2018
  • 2018年1月19日
  • 2018年1月19日
  • 2018年1月26日
  • 2018年1月26日
  • 2018年2月2日
  • 2018年2月2日
  • 2/9/2018

2 个答案:

答案 0 :(得分:1)

您应该使用第三方库,例如dateutil。该库以性能为代价接受各种日期格式。

from dateutil import parser

lst = ['1/26/2018', '1/26/2018', '2/2/2018', '2/2/2018', '2/9 /2018', '2/9 /2018',
       '1/19/2018', '1/19/2018', '1/26/2018', '1/26/2018', '2/2/2018', '2/2/2018',
       '2/9 /2018']

res = [parser.parse(i) for i in lst]

结果:

[datetime.datetime(2018, 1, 26, 0, 0),
 datetime.datetime(2018, 1, 26, 0, 0),
 datetime.datetime(2018, 2, 2, 0, 0),
 datetime.datetime(2018, 2, 2, 0, 0),
 datetime.datetime(2018, 2, 9, 0, 0),
 datetime.datetime(2018, 2, 9, 0, 0),
 datetime.datetime(2018, 1, 19, 0, 0),
 datetime.datetime(2018, 1, 19, 0, 0),
 datetime.datetime(2018, 1, 26, 0, 0),
 datetime.datetime(2018, 1, 26, 0, 0),
 datetime.datetime(2018, 2, 2, 0, 0),
 datetime.datetime(2018, 2, 2, 0, 0),
 datetime.datetime(2018, 2, 9, 0, 0)]

答案 1 :(得分:1)

您可以使用re.splitstr.zfill

import re
dates = ['1/26/2018', '1/26/2018', '2/2/2018', '2/2/2018', '2/9 /2018', '2/9 /2018', '1/19/2018', '1/19/2018', '1/26/2018', '1/26/2018', '2/2/2018', '2/2/2018', '2/9 /2018']
new_dates = ['{}/{}/{}'.format(a.zfill(2), *b) for a, *b in map(lambda x:re.split('[/\s]+', x), dates)]

输出:

['01/26/2018', '01/26/2018', '02/2/2018', '02/2/2018', '02/9/2018', '02/9/2018', '01/19/2018', '01/19/2018', '01/26/2018', '01/26/2018', '02/2/2018', '02/2/2018', '02/9/2018']