Данные в файле HDF с использованием Python отсутствуют

Я пытаюсь прочитать в файле hdf, но группы не отображаются. Я пробовал несколько разных методов с использованием таблиц и h5py, но ни один из них не работает при отображении групп в файле. Я проверил, и файл "Данные иерархического формата данных (версия 5)" (см. Обновление). Информация о файле здесь для справки.

Пример данных можно найти здесь

import h5py
import tables as tb

hdffile = "TRMM_LIS_SC.04.1_2010.260.73132"

Используя h5py:

f = h5py.File(hdffile,'w')
print(f)

Выходы:

< HDF5 file "TRMM_LIS_SC.04.1_2010.260.73132" (mode r+) >
[]

Используя таблицы:

fi=tb.openFile(hdffile,'r')
print(fi)

Выходы:

TRMM_LIS_SC.04.1_2010.260.73132 (File) ''
Last modif.: 'Wed Aug 10 18:41:44 2016'
Object Tree:
/ (RootGroup) ''

Closing remaining open files:TRMM_LIS_SC.04.1_2010.260.73132...done

ОБНОВИТЬ

h5py.File(hdffile,'w') overwrote the file and emptied it.

Теперь мой вопрос: как прочитать файл hdf версии 4 в python, так как h5py и таблицы не работают?

3 ответа

Решение

Насколько большой файл? Я думаю что делаю h5py.File(hdffile,'w') перезаписывает, так что пусто использование h5py.File(hdffile,'r') читать.

У меня недостаточно кармы, чтобы ответить на ответ @Luke H, но чтение этой идеи в пандах может быть плохой идеей. Pandas hdf5 использует pytables, что является "самоуверенным" способом использования hdf5. Это означает, что он хранит дополнительные метаданные (например, индекс). Так что я бы использовал pytables только для чтения файла, если он был сделан с помощью pytables.

ОБНОВИТЬ:

Я бы порекомендовал вам сначала преобразовать файлы HDF версии 4 в файлы HDF5 / h5, так как все современные библиотеки / модули работают с HDF версии 5...

СТАРЫЙ ответ:

попробуйте это так:

store = pd.HDFStore(filename)
print(store)

это должно напечатать вам информацию о файле HDF, включая сохраненные ключи, длину сохраненных DF и т. д.

Демо-версия:

In [18]: fn = r'C:\Temp\a.h5'

In [19]: store = pd.HDFStore(fn)

In [20]: print(store)
<class 'pandas.io.pytables.HDFStore'>
File path: C:\Temp\a.h5
/df_dc               frame_table  (typ->appendable,nrows->10,ncols->3,indexers->[index],dc->[a,b,c])
/df_no_dc            frame_table  (typ->appendable,nrows->10,ncols->3,indexers->[index])

теперь вы можете читать кадры данных, используя ключи из вывода выше:

In [21]: df = store.select('df_dc')

In [22]: df
Out[22]:
    a   b   c
0  92  80  86
1  27  49  62
2  55  64  60
3  31  66   3
4  37  75  81
5  49  69  87
6  59   0  87
7  69  91  39
8  93  75  31
9  21  15   7

Попробуйте использовать панд:

import pandas as pd
f = pd.read_hdf(C:/path/to/file)

Смотрите документацию Pandas HDF здесь.

Это должно читаться в любом файле hdf как информационный кадр, которым вы можете манипулировать.

Другие вопросы по тегам