在 python 中使用多种日期时间格式

Working with more than one datetime format in python

下面是示例数据

Datetime

11/19/2020 9:48:50 AM
12/17/2020 2:41:02 PM
2020-02-11 14:44:58
2020-28-12 10:41:02
2020-05-12 06:31:39

11/19/2020 在 mm/dd/yyyy 而 2020-28-12 是 yyyy-dd-mm。

应用 pd.to_datetime 后,下面是我得到的输出。

Date
2020-11-19 09:48:50
2020-12-17 22:41:02
2020-02-11 14:44:58
2020-28-12 10:41:02
2020-05-12 06:31:39

如果输入数据带有斜杠 (/),即 11/19/2020,则输入本身的格式为 mm/dd/yyyy,当数据带有破折号 (-),即 2020-02-11 则格式为 yyyy-dd-mm。但是在应用 pd.to_datetime 之后,日期时间正在互换。

前两个输出是正确的。后三位需要更正为

2020-11-02 14:44:58
2020-12-28 10:41:02
2020-12-05 06:31:39

请建议使用通用格式,即 yyyy-mm-dd 格式。

使用to_datetime with specify both formats and errors='coerce' for missing values if no match and then replace them by another Series in Series.fillna:

d1 = pd.to_datetime(df['datetime'], format='%Y-%d-%m %H:%M:%S', errors='coerce')
d2 = pd.to_datetime(df['datetime'], format='%m/%d/%Y %I:%M:%S %p', errors='coerce')

df['datetime'] = d1.fillna(d2)
print (df)
             datetime
0 2020-11-19 09:48:50
1 2020-12-17 14:41:02
2 2020-11-02 14:44:58
3 2020-12-28 10:41:02
4 2020-12-05 06:31:39