Python 时间序列作为两个numpy数组(';日期';和';数据';),然后提取';数据';从指定的';日期';范围
我想问一下,对于以下问题,最好的“日期”数据类型是什么: 我从一个ASCII文件读取timeseries数据并创建两个numpy数组;1)Python 时间序列作为两个numpy数组(';日期';和';数据';),然后提取';数据';从指定的';日期';范围,python,arrays,datetime,numpy,time-series,Python,Arrays,Datetime,Numpy,Time Series,我想问一下,对于以下问题,最好的“日期”数据类型是什么: 我从一个ASCII文件读取timeseries数据并创建两个numpy数组;1) 日期,2)数据。创建后,我想从不同ASCII文件指定的日期范围中提取数据(start\u time,和duration,以秒为单位)。这些“数据”将被提取到另一个numpy数组中,并写入输出文件 到目前为止,我已经: import numpy as np date = ['2016-07-05 12:00:00.000000',
日期
,2)数据
。创建后,我想从不同ASCII文件指定的日期范围中提取数据(start\u 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))]
然而,我为date
尝试的几乎每种类型的数据类型或日期时间类都会给我带来某种错误(例如,对象没有属性)
\u getitem\u
等)或与列表不兼容。在这种情况下,您将使用什么格式?POSIX
谢谢 我会用熊猫来做这个。对时间序列的东西有很好的支持。您可能希望使用时间序列索引来进行更详细的工作,这里我将它用作普通列 注意,您的数据和日期有不同的行数,我在数据中添加了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)]
明亮的非常感谢。为了补充这一点,我使用了:
b=pd.DataFrame.\u getitem\u column(a,'data')c=np.asarray(b,dtype='string')
为了将“data”列作为np数组获取,您可以执行x.data.values-pandas在内部将数据作为np.array保存,而.values将其取出。
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