Python 多个日期时间到一个

Python Multiple Datetimes To One

我在 Dataframe 中有两种类型的日期时间格式。

Date
2019-01-06  00:00:00 (%Y-%d-%m %H:%M:%S')
07/17/2018 ('%m/%d/%Y')

我想转换成一种特定的日期时间格式。下面是我正在使用的脚本

d1 = pd.to_datetime(df1['DATE'], format='%m/%d/%Y',errors='coerce')
d2 = pd.to_datetime(df1['DATE'], format='%Y-%d-%m %H:%M:%S',errors='coerce')
df1['Date'] = d2.fillna(d1)

在执行此操作时,代码会将其他一些日期时间合并到另一个日期时间中。例如:2018 年 1 月 7 日是 2018 年 7 月 1 日。此问题与上述脚本 运行 之后的格式 (%Y-%d-%m %H:%M:%S') 有关。

如果格式 2019-01-06 00:00:00 中也有混合格式 - 这意味着它应该是一月或六月,唯一的方法是优先考虑一种格式 - 例如在这里头几个月,添加第一个格式 d2 然后 d3 链接 fillna:

d1 = pd.to_datetime(df1['DATE'], format='%m/%d/%Y',errors='coerce')
d2 = pd.to_datetime(df1['DATE'], format='%Y-%m-%d %H:%M:%S',errors='coerce')
d3 = pd.to_datetime(df1['DATE'], format='%Y-%d-%m %H:%M:%S',errors='coerce')

df1['Date'] = d2.fillna(d1).fillna(d3)

如果需要优先考虑第一天:

df1['Date'] = d3.fillna(d1).fillna(d2)

在示例数据中可以检查差异:

print (df1)
                  DATE
0  2019-01-06 00:00:00
1  2019-01-15 00:00:00
2  2019-20-10 00:00:00
3           07/17/2018

d1 = pd.to_datetime(df1['DATE'], format='%m/%d/%Y',errors='coerce')
d2 = pd.to_datetime(df1['DATE'], format='%Y-%m-%d %H:%M:%S',errors='coerce')
d3 = pd.to_datetime(df1['DATE'], format='%Y-%d-%m %H:%M:%S',errors='coerce')

df1['Date1'] = d2.fillna(d1).fillna(d3)
df1['Date2'] = d3.fillna(d1).fillna(d2)
print (df1)
                  DATE      Date1      Date2
0  2019-01-06 00:00:00 2019-01-06 2019-06-01 <- difference
1  2019-01-15 00:00:00 2019-01-15 2019-01-15
2  2019-20-10 00:00:00 2019-10-20 2019-10-20
3           07/17/2018 2018-07-17 2018-07-17