Как преобразовать время эпохи / unix в фрейм данных Julia?

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) .