我目前正在分析一个包含许多不同日期类型的数据集,例如
12/31/1991
December 10, 1980
September 25, 1970
2005-11-14
December 1990
October 12, 2005
1993-06-26
有没有一种方法可以将所有日期数据规范化为单个格式 'YYYY-MM-DD'? 我熟悉Python中的datetime包,但是最好的方法是什么,以便它可以处理所有不同的日期类型。
如果您可以接受使用库,可以使用dateutil
库函数将所有日期解析为datetime对象,然后使用datetime.datetime.strftime()
将它们重新解析为所需格式的字符串。
安装dateutil
:
pip3 install python-dateutil
例子:
s = ["12/31/1991",
"December 10, 1980",
"September 25, 1970",
"2005-11-14",
"December 1990",
"October 12, 2005",
"1993-06-26",
"11/20/1967 6:08:15 PM"]
from dateutil import parser
for i in s:
d = parser.parse(i)
print(d.strftime("%Y-%m-%d %H:%M:%S"))
输出:
1991-12-31 00:00:00
1980-12-10 00:00:00
1970-09-25 00:00:00
2005-11-14 00:00:00
1990-12-05 00:00:00
2005-10-12 00:00:00
1993-06-26 00:00:00
1967-11-20 18:08:15
需要注意的是,dateutil.parser.parse
会使用当前日期来替代字符串中缺失的任何日期部分(如上面解析'December 1990'
所示, 它被解析为1990-12-10
因为10
是当前日期)。
如果没有提供时间,则使用00:00:00
。有关如何处理时区,请参阅文档。
我已经解决了这个问题:
from dateutil.parser import parse
dt = parse(str(row))
print(dt.strftime('%Y-%m-%d'))
它能够处理不同的日期类型。
parse
函数,否则会导致意想不到的结果:parse('of 5')==datetime.datetime(2022, 3, 5, 0, 0)
。 - Matt