dataframe #datetime #timestamp #julia
#фрейм данных #дата и время #временная метка #джулия
Вопрос:
Я пытаюсь найти решение для преобразования df[!, r"TimeStamp"]
времени unix или эпохи в формат datetime с добавлением 9 часов, например, pd.to_datetime(df["TimeStamp"], unit = "ms")
в Python.
Вот пример фрейма данных Julia
:
df = DataFrame(TimeStamp = [1632868171713,1632868172713,1632868173713],
Roll = [-1.1, -2, 1],
Pitch =[-1, -1, 3.1],
Yaw = [-1, -4.2, 2],
)
и ниже ожидаемый результат.
TimeStamp Roll Pitch Yaw
Date Float64 Float64 Float64
1 2021-09-29 07:29:31.713 -1.1 -1.0 -1.0
2 2021-09-29 07:29:32.713 -2.0 -1.0 -4.2
3 2021-09-29 07:29:33.713 1.0 3.1 2.0
Обновить:
У меня есть решение unix2datetime()
с использованием циклов for, с помощью @ MrFuppes, но интересно, есть ли в Julia функция, подобная pd.to_datetime
and timedelta(hours = 9)
.
Комментарии:
1.
unix2datetime
ввод занимает секунды, см. Документы . ваши входные данные кажутся миллисекундами , поэтому разделите на 1000, чтобы получить секунды.
Ответ №1:
вы могли бы транслировать столбец timestamp в DateTime. Добавление длительности также довольно просто:
using Dates
using DataFrames
df = DataFrame(TimeStamp=[1632868171713,1632868172713,1632868173713],
Roll=[-1.1, -2, 1],
Pitch=[-1, -1, 3.1],
Yaw=[-1, -4.2, 2],
)
df.Date = unix2datetime.(df.TimeStamp / 1000)
# or map it:
# df.Date = map(unix2datetime, df.TimeStamp / 1000)
df.DatePlusSevenH = df.Date Hour(7)
println(df)
# 3×6 DataFrame
# Row │ TimeStamp Roll Pitch Yaw Date DatePlusSevenH
# │ Int64 Float64 Float64 Float64 DateTime DateTime
# ─────┼────────────────────────────────────────────────────────────────────────────────────────────
# 1 │ 1632868171713 -1.1 -1.0 -1.0 2021-09-28T22:29:31.713 2021-09-29T05:29:31.713
# 2 │ 1632868172713 -2.0 -1.0 -4.2 2021-09-28T22:29:32.713 2021-09-29T05:29:32.713
# 3 │ 1632868173713 1.0 3.1 2.0 2021-09-28T22:29:33.713 2021-09-29T05:29:33.713
Комментарии:
1. Еще лучше использовать широковещательную передачу:
df.Date = unix2datetime.(df.TimeStamp / 1000)
2. @TedDunning спасибо за подсказку, это больше похоже на нее. Думаю, моим навыкам Джулии нужно немного подрасти 😉
3. Еще лучше использовать широковещательную передачу везде, чтобы избежать выделения временного вектора :
df.Date = unix2datetime.(df.TimeStamp ./ 1000)
.