【问题标题】:datetime from timeseries data in multiple columns来自多列时间序列数据的日期时间
【发布时间】:2014-02-11 10:07:56
【问题描述】:

我有一些时间序列数据。它同时具有时间戳和高度数据。我正在尝试以 python 可接受的格式提取时间戳,但无法这样做。我可以将数据作为单独的值等输入,但无法以%y/%m/%d %h:%m:%s 格式输入。

#yr  mo dy hr mn  s -        m
2013 12 01 00 00 00 1 5570.251
2013 12 01 00 15 00 1 5570.276
2013 12 01 00 30 00 1 5570.300
2013 12 01 00 45 00 1 5570.322
2013 12 01 01 00 00 1 5570.344
2013 12 01 01 15 00 1 5570.365
2013 12 01 01 30 00 1 5570.381
2013 12 01 01 45 00 1 5570.398
2013 12 01 02 00 00 1 5570.407

我在上面展示了一个数据样本。最后两列是常数1 和高度。正如你所看到的,它有空格让我很难在 python 中使用datetime 模块。

【问题讨论】:

  • 什么是“1 5570.251”?毫秒?

标签: python datetime numpy time-series


【解决方案1】:

在解析日期和高度信息之前,您似乎需要将一长串数据分成几行。由于所有数据的长度似乎都相同,因此这段代码应该可以工作:

data = "2013 12 01 00 00 00 1 5570.251 2013 12 01 00 15 00 1 5570.276 2013 12 01 00 30 00 1 5570.300 2013 12 01 00 45 00 1 5570.322 2013 12 01 01 00 00 1 5570.344 2013 12 01 01 15 00 1 5570.365 2013 12 01 01 30 00 1 5570.381 2013 12 01 01 45 00 1 5570.398 2013 12 01 02 00 00 1 5570.407"

for i in xrange(0, len(data), 31):
   row = data[i:i+31]
   t = row[:19]
   h = row[20:]
   d = datetime.strptime(t, "%Y %m %d %H %M %S")   
   print "DATE:", d, "  HEIGHT:", h

如果某些数据的长度不同(例如,如果高度不总是 8 个字符),那么您将需要解析原始数据以在每 8 个空格后拆分字符串。以上内容更容易阅读,但假设您的数据是统一的。

【讨论】:

    【解决方案2】:

    我不确定你最后的数字是什么意思,但你可以将空格放在格式字符串中来处理它们。

    >>> import datetime
    >>> data = ...
    >>> [(datetime.datetime.strptime(data[i:i+22],"%Y %m %d %H %M %S 1 "),data[i+22:i+30]) for i in range(len(data))[::31]]
    
    [(datetime.datetime(2013, 12, 1, 0, 0), '5570.251'),
     (datetime.datetime(2013, 12, 1, 0, 15), '5570.276'),
      ...
    (datetime.datetime(2013, 12, 1, 2, 0), '5570.407')]
    

    这会给你一个元组列表,每个元组包含日期时间对象,以及相应的高度

    【讨论】:

    • 嗨...能够通过单个数据输入来计算...在时间序列上苦苦挣扎...例如,如果我有 20 个时间戳,间隔为 15 分钟...。# YR Mo Dy Hr Mn S - M 2013 12 01 00 00 00 1 5 5 5570.251 2013 12 01 00 15 00 1 5570.276 2013 12 01 00 2013 12 01 00 401 00 4 5 5570.322 2013 12 01 01 00 00 1 5570.344 2013 12 01 01 15 00 1 5570.365 2013 12 01 01 30 00 1 5570.381 2013 12 01 01 45 00 1 5570.398 2013 12 01 02 45 00 1 5570.420....
    • 在问题中更好地解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2018-02-02
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    相关资源
    最近更新 更多