0

假设我有以下 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 = 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 () 不带参数

有任何想法吗?

4

1 回答 1

1

以一种有点骇人听闻的方式,您可以在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

在 pytables 中有一个被称为descr_from_dtype()从(可能是嵌套的)numpy dtype 中创建表描述的函数。运行 a 时它不会自动导入from tables import *,因此您必须显式导入它。当您遇到嵌套表的语法问题时,此功能可能会派上用场。

于 2013-05-31T17:06:16.340 回答