Pytables检索最大值和最小值



我已经创建了一个python脚本,该脚本从插座上接收时间序列数据,并通过Pytables将其写入HDF5文件,如:

#Define description object to pass to the table constructor
class DataPoint(tb.IsDescription):
    timestamp = tb.Time64Col() #UNIX timestamp
    value = tb.Float32Col() #Value

每次脚本运行它 Will 接收一些数据寿命,这些数据寿命以前将与新的未保存数据一起保存到文件中。我想确保在文件中不会重复时间戳行,因此需要过滤到达。

为此,我需要检查文件中已经存在的数据范围,即目前的最大时间戳和最小时间戳值。

任何人都可以证明查询逻辑以最大和最小时间戳检索行?

在这里,您可以使用floats的一个简单示例,该示例将读取HDF5表/数据集读取到numpy数组,然后使用.max().min()操作员获取最大/min,然后使用.argmax(),然后.argmin()到获取每个索引。对于Unix时间戳以及操作员的工作方式,我不熟悉Time64Col()。我会让你弄清楚。: - )

前两个示例提取带有不同PYTABLES方法的单列。
第三种方法将整个表提取到数组,然后用字段/列名称索引。
使用对您最有意义的技术。

请注意,数据是随机生成的,因此输出也将是随机的。但是,第一和第三种方法的输出应始终相同。

import tables as tb
import numpy as np
# Create h5 file with 1 dataset
h5f = tb.open_file('SO_55266365.h5', 'w')
mydtype = np.dtype([('param1',float),('param2',float),('param3',float)])
arr = np.random.rand(500,3)
recarr = np.core.records.array(arr,dtype=mydtype)
h5f.create_table('/', 'set1', obj=recarr )
# Close, then Reopen file READ ONLY
h5f.close()
h5f = tb.open_file('SO_55266365.h5', 'r')
# Get first column (param1)
p1 = h5f.root.set1.col('param1')
print ('param 1 Max = ' , p1.max(), 'at row =' , p1.argmax() )
print ('param 1 Min = ' , p1.min(), 'at row =' , p1.argmin() )
# Get second column (param2)
p2 = h5f.root.set1.read(field='param2')
print ('param 2 Max = ' , p2.max(), 'at row =' , p2.argmax() )
print ('param 2 Min = ' , p2.min(), 'at row =' , p2.argmin() )
# Get all 3 columns
# (index to get column when referencing the object)
p123 = h5f.root.set1.read()
print ('param 1 Max = ' , p123['param1'].max(), 'at row =' , p123['param1'].argmax() )
print ('param 1 Min = ' , p123['param1'].min(), 'at row =' , p123['param1'].argmin() )
h5f.close()

最新更新