python:使用混合格式将列从字符串转换为日期时间

时间:2018-08-04 11:05:48

标签: python pandas datetime datetime-format

我已经无数次地从字符串转换为日期时间。但是,在每种情况下,字符串格式都是一致的。现在,我有一个要更改混合格式的数据框。下面的示例,但这遍及了100,000行。

index    date    
0        30 Jan 2018
1        January 30 2018

我可以分别转换每种类型,但是有一种方法可以轻松地将df ['date']转换为具有混合格式的datetime吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这里有一个模块可以为您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'>)