Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换字符串日期,不能用零填充_Python_String_Python 3.x_Datetime_Strptime - Fatal编程技术网

Python 转换字符串日期,不能用零填充

Python 转换字符串日期,不能用零填充,python,string,python-3.x,datetime,strptime,Python,String,Python 3.x,Datetime,Strptime,我从一个非传统的来源获取数据和一些日期,因此字符串日期存在一些细微的差异。最大的区别在于,有一些日期混合在一起,其中一天没有用零填充,一天之后可能会有一个空格(在日期2/9/2018的情况下),月份也没有用零填充。我在尝试datetime.strTime时遇到错误,即“时间数据与格式“%m%d%Y”不匹配。我如何转换存在类似细微差异的日期列?请参阅下面的代码和示例数据 d_o = datetime.datetime.strptime(df['start'][1], '%m %d %Y') 2

我从一个非传统的来源获取数据和一些日期,因此字符串日期存在一些细微的差异。最大的区别在于,有一些日期混合在一起,其中一天没有用零填充,一天之后可能会有一个空格(在日期2/9/2018的情况下),月份也没有用零填充。我在尝试datetime.strTime时遇到错误,即“时间数据与格式“%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日
  • 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日

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

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)]

您可以使用
re.split
str.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']