我有一个CSV文件,其日期列包含一些脏数据,即以不同格式(美国和英国)存储的日期。我想创建另一个转换日期的CSV文件,以便它们始终以英国格式存储,使我能够正确导入到我的SQL数据库中。
我希望将日期转换为以下格式:
' 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)
有人可以帮忙吗?
由于
答案 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