假设我有以下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 ()不带参数
有什么想法吗?
答案 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}}时,它不会自动导入,因此您必须明确导入它。当您遇到嵌套表的语法问题时,此函数可能会派上用场。