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

时间:2019-04-26 02:17:21

标签: python pandas dataframe timestamp string-to-datetime

我在pandas数据框中有两列,如下所示。请注意,某些EVENT_TIME的格式为hh.mm.ss,有些为hh:mm:ss AM/PM格式。

enter image description here

正在运行...

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列“添加”到数据框中?

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

1 个答案:

答案 0 :(得分:3)

使用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)