2013-04-15 3 views
0

J'utilise PyTables 2.4.0 et Python 2.7 J'ai une base de données qui contient la table typique suivante:PyTables recherche dans le noyau sur Time64Col

/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} 

Je remplir les colonnes d'horodatage en utilisant secondes float .

Les données semble OK dans ma session 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')]) 

.. mais lorsque je tente de faire une recherche en utilisant la colonne indexée « de update_seconds », tout se passe en forme de poire en noyau:

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

Par exemple, je reçois 0 lignes retournées alors que je m'attendais à 87591 d'entre eux. Parfois, je parviens à obtenir des lignes avec une requête '> =', mais les colonnes d'horodatage sont renvoyées en tant que gros flottants (~ 10^79). Il semble qu'il y ait une conversion de type implicite qui provoque une mauvaise interprétation des valeurs Time64Col. Quelqu'un peut-il repérer mon erreur, ou devrais-je oublier Time64Cols et les convertir tous en Float64 (et comment je fais cela?)

Répondre

Questions connexes