Индексация и столбцы данных в Pandas / PyTables

http://pandas.pydata.org/pandas-docs/stable/io.html#indexing

Я действительно смущен этой концепцией столбцов данных в Pandas HDF5 IO. Плюс есть очень мало информации об этом, которую можно найти в googling. Поскольку я погружаюсь в Pandas в большом проекте, который включает в себя хранилище HDF5, я хотел бы четко рассказать о таких концепциях.

Документы говорят:

Вы можете назначить (и индексировать) определенные столбцы, которые вы хотите выполнять запросы (кроме индексируемых столбцов, которые вы всегда можете запросить). Например, вы хотите выполнить эту общую операцию на диске и вернуть только кадр, соответствующий этому запросу. Вы можете указать data_columns = True, чтобы заставить все столбцы быть data_columns

Это смущает:

  1. other than the indexable columns, which you can always query : что такое индексируемые столбцы? не все индексы индексируются столбцами? Что означает этот термин?

  2. For instance say you want to perform this common operation, on-disk, and return just the frame that matches this query. Как это отличается от обычного запроса на Pytable; с или без каких-либо индексов data_columns ?

  3. В чем принципиальная разница между столбцом без индексирования, индексирования и столбца data_column?

One Solution collect form web for “Индексация и столбцы данных в Pandas / PyTables”

Вы должны просто попробовать.

 In [22]: df = DataFrame(np.random.randn(5,2),columns=['A','B']) In [23]: store = pd.HDFStore('test.h5',mode='w') In [24]: store.append('df_only_indexables',df) In [25]: store.append('df_with_data_columns',df,data_columns=True) In [26]: store.append('df_no_index',df,data_columns=True,index=False) In [27]: store Out[27]: <class 'pandas.io.pytables.HDFStore'> File path: test.h5 /df_no_index frame_table (typ->appendable,nrows->5,ncols->2,indexers->[index],dc->[A,B]) /df_only_indexables frame_table (typ->appendable,nrows->5,ncols->2,indexers->[index]) /df_with_data_columns frame_table (typ->appendable,nrows->5,ncols->2,indexers->[index],dc->[A,B]) In [28]: store.close() 
  • вы автоматически получаете индекс сохраненного фрейма в качестве столбца запроса. По умолчанию никакие другие столбцы не могут быть запрошены.

  • Если вы укажете data_columns=True или data_columns=list_of_columns , то они будут храниться отдельно и затем могут быть впоследствии запрошены.

  • Если вы укажете index=False то индекс запросов PyTables не будет автоматически создан для столбца запроса (например, index и / или data_columns ).

Чтобы увидеть фактические создаваемые индексы (индексы PyTables ), см. Выход ниже. colindexes определяет, какие столбцы имеют фактический индекс PyTables . (Я урезал его несколько).

 /df_no_index/table (Table(5,)) '' description := { "index": Int64Col(shape=(), dflt=0, pos=0), "A": Float64Col(shape=(), dflt=0.0, pos=1), "B": Float64Col(shape=(), dflt=0.0, pos=2)} byteorder := 'little' chunkshape := (2730,) /df_no_index/table._v_attrs (AttributeSet), 15 attributes: [A_dtype := 'float64', A_kind := ['A'], B_dtype := 'float64', B_kind := ['B'], CLASS := 'TABLE', FIELD_0_FILL := 0, FIELD_0_NAME := 'index', FIELD_1_FILL := 0.0, FIELD_1_NAME := 'A', FIELD_2_FILL := 0.0, FIELD_2_NAME := 'B', NROWS := 5, TITLE := '', VERSION := '2.7', index_kind := 'integer'] /df_only_indexables/table (Table(5,)) '' description := { "index": Int64Col(shape=(), dflt=0, pos=0), "values_block_0": Float64Col(shape=(2,), dflt=0.0, pos=1)} byteorder := 'little' chunkshape := (2730,) autoindex := True colindexes := { "index": Index(6, medium, shuffle, zlib(1)).is_csi=False} /df_only_indexables/table._v_attrs (AttributeSet), 11 attributes: [CLASS := 'TABLE', FIELD_0_FILL := 0, FIELD_0_NAME := 'index', FIELD_1_FILL := 0.0, FIELD_1_NAME := 'values_block_0', NROWS := 5, TITLE := '', VERSION := '2.7', index_kind := 'integer', values_block_0_dtype := 'float64', values_block_0_kind := ['A', 'B']] /df_with_data_columns/table (Table(5,)) '' description := { "index": Int64Col(shape=(), dflt=0, pos=0), "A": Float64Col(shape=(), dflt=0.0, pos=1), "B": Float64Col(shape=(), dflt=0.0, pos=2)} byteorder := 'little' chunkshape := (2730,) autoindex := True colindexes := { "A": Index(6, medium, shuffle, zlib(1)).is_csi=False, "index": Index(6, medium, shuffle, zlib(1)).is_csi=False, "B": Index(6, medium, shuffle, zlib(1)).is_csi=False} /df_with_data_columns/table._v_attrs (AttributeSet), 15 attributes: [A_dtype := 'float64', A_kind := ['A'], B_dtype := 'float64', B_kind := ['B'], CLASS := 'TABLE', FIELD_0_FILL := 0, FIELD_0_NAME := 'index', FIELD_1_FILL := 0.0, FIELD_1_NAME := 'A', FIELD_2_FILL := 0.0, FIELD_2_NAME := 'B', NROWS := 5, TITLE := '', VERSION := '2.7', index_kind := 'integer'] 

Поэтому, если вы хотите запросить столбец, сделайте его data_column . Если вы этого не сделаете, они будут храниться в блоках по dtype (быстрее / меньше места).

Обычно вы хотите индексировать столбец для извлечения, НО, если вы создаете и затем добавляете несколько файлов в один магазин, вы обычно отключите создание индекса и делаете это в конце (поскольку это довольно дорого для создания, поскольку вы идти).

См. Поваренную книгу для зверинца вопросов.

  • Хранение малоразмерной матрицы в HDF5 (PyTables)
  • Как указать min_itemsize для столбца индекса
  • Pip не признает Cython
  • Матричное умножение с использованием hdf5
  • объединение огромных файлов h5 с несколькими наборами данных в один с odo
  • Pytables 2.3.1 с Python 2.5 в Windows: ошибка - не удалось найти локальную установку hdf5
  • ошибка hdf5, когда формат = таблица, pandas pytables
  • GIL для ограниченного потока IO в расширении C (HDF5)
  • Python - лучший язык программирования в мире.