Есть ли способ хранить столбцы PyTable в определенном порядке? - PullRequest
4 голосов
/ 29 ноября 2010

Кажется, что столбцы PyTable располагаются в алфавитном порядке при использовании словаря или класса для определения схемы для вызова метода createTable ().Мне нужно установить конкретный порядок, а затем использовать numpy.genfromtxt () для чтения и сохранения моих данных из текста.В моем текстовом файле нет имен переменных, включенных в алфавитном порядке, как для PyTable.

Например, если предположить, что текстовый файл называется mydata.txt и организован следующим образом:

time (row1) bVar (строка 1) dVar (строка 1) aVar (строка 1) cVar (строка 1)

время (строка 2) bVar (строка 2) dVar (строка 2) aVar (строка 2) cVar (строка 2) ...

time (rowN) bVar (rowN) dVar (rowN) aVar (rowN) cVar (rowN)

Итак, необходимо создать таблицу, упорядоченную по этим столбцам, а затем использовать numpy.genfromtxtКоманда для заполнения таблицы.

# Column and Table definition with desired order
class parmDev(tables.IsDescription):
    time = tables.Float64Col()
    bVar = tables.Float64Col()
    dVar = tables.Float64Col()
    aVar = tables.Float64Col()
    cVar = tables.Float64Col()

#...

mytab = tables.createTable( group, tabName, paramDev )

data = numpy.genfromtxt(mydata.txt)
mytab.append(data)

Это желательно, потому что это простой код и очень быстрый.Но столбцы PyTable всегда упорядочены в алфавитном порядке, а добавленные данные упорядочены в соответствии с желаемым порядком.Я что-то упустил здесь?Есть ли способ, чтобы порядок столбцов таблицы соответствовал порядку определения класса, а не был алфавитным?

1 Ответ

9 голосов
/ 08 декабря 2010

Да, вы можете определить порядок в таблицах несколькими различными способами.Самый простой - использовать параметр pos для каждого столбца.См. Документы для класса Col:

http://pytables.github.io/usersguide/libref/declarative_classes.html#the-col-class-and-its-descendants

. Для вашего примера это будет выглядеть так:

class parmDev(tables.IsDescription):
    time = tables.Float64Col(pos=0)
    bVar = tables.Float64Col(pos=1)
    dVar = tables.Float64Col(pos=2)
    aVar = tables.Float64Col(pos=3)
    cVar = tables.Float64Col(pos=4)

Надеюсь, это поможет

...