【问题标题】:How to convert epoch/unix time in Julia dataframe?如何在 Julia 数据框中转换纪元/unix 时间?
【发布时间】:2021-12-02 14:57:26
【问题描述】:

我正在尝试找到将 df[!, r"TimeStamp"] (即 unix 或 epoch 时间)转换为 加 9 小时 的日期时间格式的解决方案,例如 Python 中的pd.to_datetime(df["TimeStamp"], unit = "ms") 。

这里是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和timedelta(hours = 9)这样的功能。

【问题讨论】:

  • unix2datetime 以秒为输入,请参阅the docs。您的输入似乎是 毫秒,所以除以 1000 得到秒数。

标签: dataframe datetime timestamp julia


【解决方案1】:

您可以将时间戳列广播到 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 

【讨论】:

  • 更好的是,使用广播:df.Date = unix2datetime.(df.TimeStamp / 1000)
  • @TedDunning 感谢您的提示,这更像是它。我猜我的 Julia 技能需要提高一点;-)
  • 更好的是,到处使用广播以避免分配临时向量:df.Date = unix2datetime.(df.TimeStamp ./ 1000)。
猜你喜欢
  • 2013-01-15
  • 2012-01-30
  • 2016-01-20
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 2021-11-23
相关资源
最近更新 更多