Предупреждения Pandas Pytables и низкая производительность

Я тестировал pandas и pytables для некоторых больших наборов финансовых данных и столкнулся с настоящим камнем преткновения:

При сохранении в файле pytables панды, по-видимому, хранят многомерные данные в очень длинных строках, а не в столбцах.

попробуй это:

from pandas import *
df = DataFrame({'col1':randn(100000000),'col2':randn(100000000)})
store = HDFStore('test.h5')
store['data'] = df    #should be a warning here about exceeding the maximum recommended rowsize
store.handle

выход:

File(filename=test7.h5, title='', mode='a', rootUEP='/', filters=Filters(complevel=0, shuffle=False, fletcher32=False))
/ (RootGroup) ''
/data (Group) ''
/data/axis0 (Array(2,)) ''
  atom := StringAtom(itemsize=4, shape=(), dflt='')
  maindim := 0
  flavor := 'numpy'
  byteorder := 'irrelevant'
  chunkshape := None
/data/axis1 (Array(100000000,)) ''
  atom := Int64Atom(shape=(), dflt=0)
  maindim := 0
  flavor := 'numpy'
  byteorder := 'little'
  chunkshape := None
/data/block0_items (Array(2,)) ''
  atom := StringAtom(itemsize=4, shape=(), dflt='')
  maindim := 0
  flavor := 'numpy'
  byteorder := 'irrelevant'
  chunkshape := None
/data/block0_values (Array(2, 100000000)) ''
  atom := Float64Atom(shape=(), dflt=0.0)
  maindim := 0
  flavor := 'numpy'
  byteorder := 'little'
  chunkshape := None

Я не совсем уверен, но я считаю, что в сочетании с сообщением об ошибке массив (2 100000000) означает двумерный массив с 2 строками и 100 000 000 столбцов. Это также показано в HDFView.

У меня очень низкая производительность (в некоторых случаях 10 секунд для data['ticks'].head()), в чем виноват?


person John_C    schedule 21.08.2012    source источник
comment
github.com/pydata/pandas/pull/1834 и github.com/pydata/pandas/issues/1824 исправьте это. Данные теперь сохраняются по столбцам? Является ли это оптимальным в отношении данных временных рядов и их сохранения по столбцам, как q/kdb+ и т. д.? Я не мог найти ничего другого о том, как данные сохраняются с помощью HDFStore, кроме PyTables.   -  person Konsta    schedule 20.10.2012
comment
В настоящее время он хранится довольно странным образом, попробуйте просмотреть дескриптор созданного вами хранилища hdf5 для получения дополнительной информации или взгляните на него в HDFView.   -  person John_C    schedule 22.10.2012


Ответы (1)


Я сделал перекрестную ссылку на проблему на GitHub:

http://github.com/pydata/pandas/issues/1824

Я лично не знал об этой проблеме, и, честно говоря, немного разочаровывает, что это проблема для PyTables или HDF5 (кто бы ни был виновником).

person Wes McKinney    schedule 29.08.2012