我有一些时间序列数据。它有时间戳和高度数据。我试图以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
模块。
答案 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个空格后拆分字符串。上面的内容更容易阅读,但假设您的数据是统一的。