【问题标题】:Converting string dates, which may not be padded by zeros转换字符串日期,不能用零填充
【发布时间】:2018-10-28 23:46:06
【问题描述】:

我从非常规来源获取数据和一些日期,因此字符串日期存在一些细微差别。最大的区别在于,有些日期混合在一起,其中一天不填充零,一天之后可能有一个空格(在日期 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

【问题讨论】:

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


    【解决方案1】:

    您应该使用第 3 方库,例如 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)]
    

    【讨论】:

      【解决方案2】:

      您可以使用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']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-18
        • 1970-01-01
        • 2013-11-05
        • 2011-07-01
        • 1970-01-01
        • 2015-07-21
        • 2014-04-30
        • 2011-05-18
        相关资源
        最近更新 更多