在PyTable表中排序嵌套结构

时间:2013-05-08 19:49:55

标签: python nested pytables

假设我有以下PyTable列描述符:

import numpy as np
import tables as pt

class Date_t(pt.IsDescription):
    year    = pt.Int32Col(shape=(), dflt=2013, pos=0)
    month   = pt.Int32Col(shape=(), dflt=1,    pos=1)
    day     = pt.Int32Col(shape=(), dflt=1,    pos=2)

class Info(pt.IsDescription):
    col1       = pt.Int32Col(shape=(), dflt=0, pos=0)
    startdate  = Date_t() 
    birthdate  = Date_t() 
    col2       = pt.Int32Col(shape=(), dflt=0, pos=3)
    enddate    = Date_t() 
    col3       = pt.Int32Col(shape=(), dflt=0, pos=5)
    col4       = pt.Int32Col(shape=(), dflt=0, pos=6) 

如何指定'startdate','birthdate'和'enddate'的位置?
我以为我可以这样做:

startdate = Date_t(pos=1)
birthdate = Date_t(pos=2)

并将Date_t类重新定义为:

class Date_t(pt.IsDescription):
    def __init__(self, pos):
        self._v_pos = pos
    year    = pt.Int32Col(shape=(), dflt=2013, pos=0)
    month   = pt.Int32Col(shape=(), dflt=1,    pos=1)
    day     = pt.Int32Col(shape=(), dflt=1,    pos=2)

但这给了我错误:
TypeError:object。 new ()不带参数

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

以某种有点hackish的方式,您可以在定义Info后更改class Info(pt.IsDescription): col1 = pt.Int32Col(shape=(), dflt=0, pos=0) startdate = Date_t() birthdate = Date_t() col2 = pt.Int32Col(shape=(), dflt=0, pos=3) enddate = Date_t() col3 = pt.Int32Col(shape=(), dflt=0, pos=5) col4 = pt.Int32Col(shape=(), dflt=0, pos=6) Info.columns['startdate']._v_pos = 1 Info.columns['birthdate']._v_pos = 2 Info.columns['enddate']._v_pos = 3 的类属性。

from tables import *

在pytables中有一个名为descr_from_dtype()的函数,它从(可能是嵌套的)numpy dtype创建表描述。当运行{{1}}时,它不会自动导入,因此您必须明确导入它。当您遇到嵌套表的语法问题时,此函数可能会派上用场。