我想问一下最好的'Date'数据类型用于以下问题:
我正在从ASCII文件中读取时间序列数据并创建两个numpy数组; 1)date
,2)data
。创建之后,我想从一个不同的ASCII文件(data
和start_time
指定的日期范围中提取duration
,以秒为单位)。这些“数据”将被提取到另一个numpy数组中并写入输出文件。
到目前为止,我有:
import numpy as np
date = ['2016-07-05 12:00:00.000000',
'2016-07-05 12:00:00.010000',
'2016-07-05 12:00:00.020000',
'2016-07-05 12:00:00.030000',
'2016-07-05 12:00:00.040000',
'2016-07-05 12:00:00.050000',
'2016-07-05 12:00:00.060000',
'2016-07-05 12:00:00.070000',
'2016-07-05 12:00:00.080000',
'2016-07-05 12:00:00.090000',
'2016-07-05 12:00:00.100000',
'2016-07-05 12:00:00.110000',
'2016-07-05 12:00:00.120000',
'2016-07-05 12:00:00.130000',
'2016-07-05 12:00:00.140000']
data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
date = np.asarray(date, dtype=np.string_)
data = np.asarray(data, dtype=np.float32)
然后,为了从所需的日期范围中提取,我有:
start_time = '2016-07-05 12:00:00.030000'
duration = 0.10
a=[]
a=data[(date >= (start_time) & (date <= (start_time + duration))]
然后将'a'转换为数组以写入另一个文件:
a=np.asarray(a, dtype='float32')
但是 - 我为date
尝试的每种dtype或datetime类都给了我一些错误(例如,对象没有属性
_getitem_
等,)或与列表不兼容。在这种情况下你会使用什么格式? POSIX?
谢谢!
答案 0 :(得分:1)
我会为此使用熊猫。对时间序列的东西有很好的支持,see the docs。您可能希望使用时间序列索引来进行更详细的工作,这里我将其用作普通列。
注意,您的数据和日期有不同的行数,我在数据中添加了0:
import pandas as pd
date = ['2016-07-05 12:00:00.000000',
'2016-07-05 12:00:00.010000',
'2016-07-05 12:00:00.020000',
'2016-07-05 12:00:00.030000',
'2016-07-05 12:00:00.040000',
'2016-07-05 12:00:00.050000',
'2016-07-05 12:00:00.060000',
'2016-07-05 12:00:00.070000',
'2016-07-05 12:00:00.080000',
'2016-07-05 12:00:00.090000',
'2016-07-05 12:00:00.100000',
'2016-07-05 12:00:00.110000',
'2016-07-05 12:00:00.120000',
'2016-07-05 12:00:00.130000',
'2016-07-05 12:00:00.140000']
data = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
x = pd.DataFrame({'date':date, 'data':data})
x.date = pd.to_datetime(x.date)
我们现在有一个包含两列的pandas数据框,您的日期时间格式和数据。
使用to_datetime函数,我们现在有一个datetime列,可以轻松地进行子集化:
start_time = pd.to_datetime('2016-07-05 12:00:00.030000')
end_time = start_time + pd.DateOffset(seconds = 0.10) #or minutes etc etc
x[(x.date < end_time) & (x.date > start_time)]
,并提供:
data date
4 4 2016-07-05 12:00:00.040
5 5 2016-07-05 12:00:00.050
6 6 2016-07-05 12:00:00.060
7 7 2016-07-05 12:00:00.070
8 8 2016-07-05 12:00:00.080
9 9 2016-07-05 12:00:00.090
10 10 2016-07-05 12:00:00.100
11 11 2016-07-05 12:00:00.110
12 12 2016-07-05 12:00:00.120