パンダのデータフレームの日付とさまざまな時間形式を単一のタイムスタンプに連結するにはどうすればよいですか?

SeaDude

pandas以下に概説するように、データフレームに2つの列があります。いくつかは、どのようにお知らせEVENT_TIMEであるがhh.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列をデータフレームに「追加」するにはどうすればよいですか?

理想的には、の代わりに使用したいと思い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)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ