gpt4 book ai didi

python - 时间序列为 2 个 numpy 数组 ('Date' 和 'Data' ),然后从指定的 'Data' 范围中提取 'Date' ?

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:59 26 4
gpt4 key购买 nike

我想问什么是最好的“日期”数据类型来解决以下问题:

我正在从 ASCII 文件读取时间序列数据并创建两个 numpy 数组; 1) 日期,2) 数据。创建后,我想从不同 ASCII 文件指定的日期范围中提取数据(start_timeduration 以秒为单位)。这些“数据”将被提取到另一个 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')

但是 - 我尝试过的几乎每种 dtype 或 datetime 类 date 都会给我带来某种错误(例如,对象没有属性_getitem_ 等)或与列表不兼容。在这种情况下您会使用什么格式? POSIX?

谢谢!

最佳答案

我会用 pandas 来做这个。对时间序列的东西有很好的支持,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 函数,我们现在有了一个日期时间列,并且可以轻松地进行子集化:

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

关于python - 时间序列为 2 个 numpy 数组 ('Date' 和 'Data' ),然后从指定的 'Data' 范围中提取 'Date' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38355517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com