У меня есть два столбца в фрейме данных pandas
, как показано ниже.Обратите внимание, что некоторые из 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:
@ Решение Вэнь-Бена привело меня сюда:
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
.Я хочу это как преобразование данных, а не как новый столбец.