来自多列中的时间序列数据的日期时间

时间:2014-01-21 17:00:23

标签: python datetime numpy time-series

我有一些时间序列数据。它有时间戳和高度数据。我试图以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模块。

2 个答案:

答案 0 :(得分:0)

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

>>> 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')]

将为您提供元组列表,每个元组包含datetime对象和相应的高度

答案 1 :(得分:0)

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

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个空格后拆分字符串。上面的内容更容易阅读,但假设您的数据是统一的。