如何将 pandas 数据帧日期和不同的时间格式连接到单个时间戳?

How to concatenate pandas dataframe date and different time formats to single timestamp?

我在 pandas 数据框中有两列,如下所述。注意有些 EVENT_TIMEhh.mm.ss,有些是 hh:mm:ss AM/PM 格式。

当运行...

import pandas

df['EVENT_DATE'] = pd.to_datetime(df['EVENT_DATE'], format='%Y%m%d')

print(df['EVENT_DATE'])

...我可以获得消耗品(出于我的目的)格式的 EVENT_DATE(例如 1999-07-28)。

但是当运行...

df['EVENT_TIME'] = pd.to_datetime(df['EVENT_TIME'], format='%H.%M.%S', errors='coerce')
df['EVENT_TIME'] = pd.to_datetime(df['EVENT_TIME'], format='%I:%M:%S %p', errors='coerce')

print(df['EVENT_TIME'])

...1900-01-01 已添加到时间中,但并未应用于所有行。

1900-01-01 16:40:00
1900-01-01 15:55:00
1900-01-01 14:30:00
1900-01-01 13:26:00
NaT
NaT
NaT
NaT

如何在单个时间戳中连接日期和时间(包括多种时间格式)?

编辑 1:

@Wen-Ben 的解决方案把我带到了这里:

1      19:53:00
11     14:30:00
15     16:30:00

然后连接 EVENT_DATE 和 EVENT_TIME,我发现这个(有效):

df['TIMESTAMP'] = df.apply(lambda r : pd.datetime.combine(r['EVENT_DATE'], r['EVENT_TIME']),1)

...结果:

1     1999-07-28 19:53:00
11    2001-07-28 14:30:00
15    2002-06-07 16:30:00

下一步我想把它变成ISO8601格式。所以我发现了这个(有效):

pd.to_datetime(df['TIMESTAMP']).apply(lambda x: x.strftime('%Y%m%dT%H:%M%SZ'))

...结果:

1      19990728T19:5300Z
11     20010728T14:3000Z
15     20020607T16:3000Z

这是我的新问题:

运行 print(TIMESTAMP) 仍然显示串联版本(例如 1999-07-28 19:53:00)而不是 ISO 版本(例如 19990728T19:5300Z

如何将 ISO8601 列 "added" 添加到数据框?

理想情况下,我希望它取代 TIMESTAMP。我希望它作为数据的转换,而不是作为新列添加。

使用fillna

s1=pd.to_datetime(df['EVENT_TIME'], format='%H.%M.%S', errors='coerce')
s2=pd.to_datetime(df['EVENT_TIME'], format='%I:%M:%S %p', errors='coerce')
df['EVENT_TIME']=s1.fillna(s2)