Как индексирование PyTables сравнивается с индексированием pandas HDFStore (PyTables)

#python #pandas #hdf5 #pytables #hdfstore

#python #pandas #hdf5 #pytables #hdfstore

Вопрос:

Библиотека PyTables и объект HDFStore (на основе PyTables) обеспечивают индексацию для пользователя.

Только для PyTables мы создаем файл HDF5 следующим образом (из документации):

 from tables import *

class Particle(IsDescription):
    identity = StringCol(itemsize=22, dflt=" ", pos=0)  # character String
    idnumber = Int16Col(dflt=1, pos = 1)  # short integer
    speed    = Float32Col(dflt=1, pos = 2)  # single-precision

# Open a file in "w"rite mode
fileh = open_file("objecttree.h5", mode = "w")

# Get the HDF5 root group
root = fileh.root

# Create the groups
group1 = fileh.create_group(root, "group1")
group2 = fileh.create_group(root, "group2")

# Now, create an array in root group
array1 = fileh.create_array(root, "array1", ["string", "array"], "String array")

# Create 1 new tables in group1
table1 = fileh.create_table(group1, "table1", Particle)

# Get the record object associated with the table:
row = table1.row

# Fill the table with 10 records
for i in xrange(10):
    # First, assign the values to the Particle record
    row['identity']  = 'This is particle: -' % (i)
    row['idnumber'] = i
    row['speed']  = i * 2.

    # This injects the Record values
    row.append()

# Flush the table buffers
table.flush()

# Finally, close the file (this also will flush all the remaining buffers!)
fileh.close()
  

Пользователи индексируют столбцы с помощью «Column.create_index ()»

Например:

 indexrows = table.cols.var1.create_index() 
indexrows = table.cols.var2.create_index() 
indexrows = table.cols.var3.create_index()
  

В последнем случае пользователи создают экземпляр объекта HDFStore, а затем выбирают, какие столбцы индексировать.

 store = HDFStore('file1.hd5')
key = "key_name"
index_columns = ["column1", "column2"]
store.append(key,... data_columns=index_columns)
  

Здесь мы индексируем по двум столбцам, что должно оптимизировать наш поиск.

Два вопроса:

(1) На самом деле мне непонятно, как установить индексы (индексы) в примере PyTables (первый пример). Здесь нет столбцов, определенных выше. На мой взгляд, есть три поля: identity, idnumber, speed. Допустим, я хотел разместить индекс по скорости и идентичности. Как бы это сделать?

(2) Существуют ли какие-либо критерии между индексацией на основе pandas и индексацией на основе PyTables? Одно быстрее другого? Занимает ли один из них больше места на диске (т. Е. Больший файл HDF5), чем другой?