Как правильно извлечь данные из файла .h5 и сохранить их в формате .txt или .csv? - PullRequest
0 голосов
/ 21 мая 2019

После многих поисков я не смог найти простой способ извлечь данные из .h5 и передать их в data.Frame на Numpy или Pandas для сохранения в .txt или .csvфайл.

import h5py
import numpy as np
import pandas as pd

filename = 'D:\data.h5'
f = h5py.File(filename, 'r')

# List all groups
print("Keys: %s" % f.keys())
a_group_key = list(f.keys())[0]

# Get the data
data = list(f[a_group_key])
pd.DataFrame(data).to_csv("hi.csv")
Keys: <KeysViewHDF5 ['dd48']>

Когда я печатаю данные, я вижу следующие результаты:

print(data)
['axis0',
 'axis1',
 'block0_items',
 'block0_values',
 'block1_items',
 'block1_values']

Буду признателен, если кто-то объяснит мне, чтоони и как я могу извлечь данных полностью и сохранить их в файле .csv.Кажется, не было рутинного способа сделать это, и это еще своего рода вызов!До сих пор я только мог видеть часть данных через:

import numpy as np 
dfm = np.fromfile('D:\data.h5', dtype=float)
print (dfm.shape)
print(dfm[5:])

dfm=pd.to_csv('train.csv')
#dfm.to_csv('hi.csv', sep=',', header=None, index=None)

Я ожидаю извлечь time_stamps и измерений в .h5 файле.

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

h5py будет обращаться к наборам данных HDF5 как к массивам.Ваш звонок для получения ключей возвращает список имен наборов данных.Теперь, когда они у вас есть, должно быть довольно просто получить к ним доступ как к массиву и записать их.Вам необходимо получить dtype, чтобы знать, что находится в каждом столбце для правильного форматирования.

Обновлено 5/22/2019 , чтобы отразить содержимое data.h5, опубликованное по ссылке в комментарии.Формат по умолчанию в np.savetxt() - '%.18e'.Предусмотрена очень простая (грубая) логика для изменения формата на основе dtype для этих наборов данных.Это требует более надежной проверки и форматирования dtype для общего использования.Также вам нужно будет добавить логику для декодирования Unicode-строк.

import h5py
filename = 'D:\data.h5'
import numpy as np
h5f = h5py.File(filename, 'r')
# get a List of data sets in group 'dd48'
a_dset_keys = list(h5f['dd48'].keys())

# Get the data
for dset in a_dset_keys :
    ds_data = (h5f['dd48'][dset])
    print ('dataset=', dset)
    print (ds_data.dtype)
    if ds_data.dtype == 'float64' :
        csvfmt = '%.18e'
    elif ds_data.dtype == 'int64' :
        csvfmt = '%.10d'
    else:
        csvfmt = '%s'
    np.savetxt('output_'+dset+'.csv', ds_data, fmt=csvfmt, delimiter=',')
0 голосов
/ 21 мая 2019

Похоже, что данные были написаны Pandas, поэтому используйте pd.read_hdf () , чтобы прочитать их.

...