在Python中将不同日期数据规范化为单一格式

14

我目前正在分析一个包含许多不同日期类型的数据集,例如

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包,但是最好的方法是什么,以便它可以处理所有不同的日期类型。

2个回答

13

如果您可以接受使用库,可以使用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。有关如何处理时区,请参阅文档


“December 1990”实际上是无效的,但它仍然显示为“1990-12-10”。有没有一种方法可以标记? - python
让我检查一下是否有任何可以解决这个问题的方法。 - Anand S Kumar
使用正则表达式,我已经解决了这个问题。谢谢。 - python
答案已接受。谢谢 :) - python
确保您将日期时间作为输入传递给parse函数,否则会导致意想不到的结果:parse('of 5')==datetime.datetime(2022, 3, 5, 0, 0) - Matt

5

我已经解决了这个问题:

from  dateutil.parser import parse
dt = parse(str(row))
print(dt.strftime('%Y-%m-%d'))

它能够处理不同的日期类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接