Python日期格式转换为英国

时间:2017-12-05 13:23:39

标签: python csv date

我有一个CSV文件,其日期列包含一些脏数据,即以不同格式(美国和英国)存储的日期。我想创建另一个转换日期的CSV文件,以便它们始终以英国格式存储,使我能够正确导入到我的SQL数据库中。 CSV with 'Date' column to be converted

我希望将日期转换为以下格式:

' 2017年5月12日' ' 2017年7月11日' ' 24-04-1999' ' 28-01-1987' ..

我尝试了以下代码:

df = F.pd.read_csv('Book1.csv', parse_dates = [0], dayfirst = True)
df['Date'] = df['Date'].apply(F.pd.to_datetime, format = '%m/%d/%Y')
df['date_eu'] = df['Date'].dt.strftime('%m-%d-%Y')
df

,但在尝试转换美国日期时会抛出错误

ValueError: time data '20/01/2018' does not match format '%m/%d/%Y' (match)

有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用Try-Parse-Else-Approach:

from datetime import datetime

def normalizeDateString(ds):
``` normalizes a date of format "d / d / dddd " to "dd/dd/dddd" ```
    sp = ds.replace(" ","").split("/")
    if len(sp[0])==1:
        sp[0]="0"+sp[0]
    if len(sp[1])==1:
        sp[1]="0"+sp[1]

    return sp[0]+"/"+sp[1]+"/"+sp[2]

def parseDT(dateString):
''' parses "dd/dd/yyyy" as US (month/day/year). Fallback to (day/month/year) on error'''
    try:
        repl =  normalizeDateString(dateString)        
        return datetime.strptime(repl, "%m/%d/%Y").date()
    except:
        return datetime.strptime(repl, "%d/%m/%Y").date()


print(parseDT("14/12/2018"))
print(parseDT("2/5/2018")) # ok for US
print(parseDT("22/5/2018")) # not ok for US
print(parseDT("12/2/2018"))
print(parseDT("2/1/2018"))

输出:

2018-12-14
2018-02-05  # US ok
2018-05-22  # EN by except
2018-12-02
2018-02-01

HTH