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]
コメントを追加