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

标签 python arrays datetime numpy time-series

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

我正在从 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/

相关文章:

python - python是否有更好的控制结构或其他功能来简化代码?

python字典键与对象属性

javascript - 重新排列数组数组的元素

c - ‘unary *’ 的类型参数无效(有 ‘int’ )

c# - 如何使用 C# 转换特定 Culture 中的 DateTime 值?

Python多线程打印语句延迟到所有线程完成执行

python - 断言错误 : Tried to export a function which references untracked resource

java - JTextfield数组,检索名称和文本

json - 在 Play 2.3.7 框架中使用 DateTime

mysql - 将 VARCHAR 时间戳转换为 TIMESTAMP?