0

我正在使用 PyTables 2.4.0 和 Python 2.7 我有一个包含以下典型表的数据库:

/anc/asc_wind_speed (Table(87591,), shuffle, blosc(3)) 'Wind speed'
  description := {
  "value_seconds": Time64Col(shape=(), dflt=0.0, pos=0),
  "update_seconds": Time64Col(shape=(), dflt=0.0, pos=1),
  "status": UInt8Col(shape=(), dflt=0, pos=2),
  "value": Float64Col(shape=(), dflt=0.0, pos=3)}
  byteorder := 'little'
  chunkshape := (2621,)
  autoIndex := True
  colindexes := {
    "update_seconds": Index(9, full, shuffle, zlib(1)).is_CSI=True,
    "value": Index(9, full, shuffle, zlib(1)).is_CSI=True}

我使用浮点秒填充时间戳列。

在我的 IPython 会话中数据看起来不错:

array([(1343779432.2160001, 1343779431.8529999, 0, 5.2975000000000003),
       (1343779433.2190001, 1343779432.9430001, 0, 5.7474999999999996),
       (1343779434.217, 1343779433.9809999, 0, 5.8600000000000003), ...,
       (1343866301.934, 1343866301.5139999, 0, 3.8424999999999998),
       (1343866302.934, 1343866302.5799999, 0, 4.0599999999999996),
       (1343866303.934, 1343866303.642, 0, 3.7825000000000002)], 

  dtype=[('value_seconds', '<f8'), ('update_seconds', '<f8'), ('status', '|u1'), ('value', '<f8')])

..但是当我尝试使用索引列'update_seconds'进行内核搜索时,一切都变成了梨形:

len(wstable.readWhere('(update_seconds <= 1343866303.642)'))
0

即,当我期待所有 87591 行时,我得到了 0 行。有时我确实设法通过'> ='查询获得一些行,但时间戳列随后以巨大的浮点数(〜10 ^ 79)返回。似乎正在进行一些隐式类型转换,导致 Time64Col 值被误解。有人可以发现我的错误,还是我应该忘记 Time64Cols 并将它们全部转换为 Float64(我该怎么做?)

4

1 回答 1

0

这是因为 Time64 是一种特殊的 C 类型结构(参见 time.h)。暂时使用 Float64Col。请参阅以下问题:https ://github.com/PyTables/PyTables/issues/230

于 2013-04-24T19:38:27.320 回答