#python #pandas #date #timestamp #format
#python #pandas #Дата #временная метка #формат
Вопрос:
В столбце TS есть обе временные метки, и я понятия не имею, какая временная метка может прийти
08/06/2020 11:52:07 PM # this is MM/dd/yyyy HH:mm:ss
07/08/2020 0:31:17 # this is dd/MM/yyyy HH:mm:ss
Комментарии:
1. Всегда ли
MM/dd/yyyy HH:mm:ss
временная метка имеетPM
?2. ДА. В нем всегда есть AM или PM
Ответ №1:
Поскольку временная метка с форматом MM/dd/yyyy HH:mm:ss
всегда содержит либо PM
, либо AM
вы могли бы определить функцию синтаксического анализа, например:
import pandas as pd
def parse_dt(sdt):
if 'AM' in sdt or 'PM' in sdt:
return pd.to_datetime(sdt)
else:
return pd.to_datetime(sdt , dayfirst=True)
Обратите внимание, вы также можете определить его с помощью lambda
для прямого использования, например read_csv
lambda dt: pd.to_datetime(sdt) if 'AM' in dt or 'PM' in dt else pd.to_datetime(sdt , dayfirst=True)
Тестирование на ваших примерах дает
>>> parse_dt('08/06/2020 11:52:07 PM')
Timestamp('2020-08-06 23:52:07')
>>> parse_dt('07/08/2020 0:31:17')
Timestamp('2020-08-07 00:31:17')
Комментарии:
1. Это сработало. Теперь мне просто нужно использовать функцию apply для фрейма данных.
2. @AnimeshKansal, я не знаю, как это
df
выглядит, но вы могли бы сделать что-то вродеdf['dt colum'] = df['dt colum'].apply(lambda dt: pd.to_datetime(sdt) if 'AM' in dt or 'PM' in dt else pd.to_datetime(sdt , dayfirst=True))
.3. Да, я смог это сделать. Большое тебе спасибо, Стефан