【问题标题】:python: convert column from string to datetime with mixed formatspython:使用混合格式将列从字符串转换为日期时间
【发布时间】:2019-01-12 01:47:53
【问题描述】:

我已经多次将列中的字符串转换为日期时间。然而,在每一种情况下,字符串格式都是一致的。现在我有一个要更改的混合格式的数据框。下面的示例,但这是贯穿 100,000 行的。

index    date    
0        30 Jan 2018
1        January 30 2018

我可以单独转换每种类型,但是有没有一种方法可以轻松地将 df['date'] 转换为具有混合格式的日期时间?

【问题讨论】:

    标签: python pandas datetime datetime-format


    【解决方案1】:

    这是一种使用datetime.strptime 的方法

    from datetime import datetime
    
    def IsNumber(s):
        try: 
            int(s)
            return True
        except ValueError:
            return False
    
    def ConvertToDatetime(date):
        date=date.split(" ") #split by space
        if(IsNumber(date[0])): #is of the form dd month year
            if(len(date[1])==3): #if month is for form Jan,Feb...
                datetime_object = datetime.strptime(" ".join(date), '%d %b %Y')
            else: #if month is for form January ,February ...
                datetime_object = datetime.strptime(" ".join(date), '%d %B %Y')
        else:  #is of the form month date year
            if(len(date[0])==3): #if month is for form Jan,Feb...
                datetime_object = datetime.strptime(" ".join(date), '%b %d %Y')
            else: #if month is for form January ,February ...
                datetime_object = datetime.strptime(" ".join(date), '%B %d %Y')
        return datetime_object
    

    您可以根据文档和格式添加更多案例 您问题中的两个示例是:

    ConvertToDatetime("30 Jan 2018")
    2018-01-30 00:00:00
    ConvertToDatetime("January 30 2018")
    2018-01-30 00:00:00
    

    【讨论】:

    • 谢谢斯鲁蒂。知道是否有一种单行方式可以做到这一点,而无需明确添加新案例?我希望避免这种情况,以防将来出现新案例,它可以处理转换而不会返回错误,然后在每次遇到新案例时添加新案例。但你上面的回答确实完成了工作。
    【解决方案2】:

    这是一个可以为你做这件事的模块dateparser

    from dateparser import parse
    print(parse('2018-04-18 22:33:40'))
    print(parse('Wed 11 Jul 2018 23:00:00 GMT'))
    

    输出:

    datetime.datetime(2018, 4, 18, 22, 33, 40)
    datetime.datetime(2018, 7, 11, 23, 0, tzinfo=<StaticTzInfo 'GMT'>)
    

    【讨论】:

      猜你喜欢
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      相关资源
      最近更新 更多