簡體   English   中英

如何將熊貓數據框日期和不同的時間格式連接到單個時間戳?

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

我在pandas數據框中有兩列,如下所示。 請注意,某些EVENT_TIMEhh.mm.sshh.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'])

...我可以使用(出於我的目的)可消耗格式(例如1999-07-28 )獲得EVENT_DATE

但是跑步的時候

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

如何在單個時間戳中連接日期和時間(包括多種時間格式)?

EDIT1:

@ 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 我希望將其作為數據的轉換,而不是作為新列添加。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM