Как правильно извлечь данные из файла.h5 и сохранить их в формате.txt или.csv?
После многих поисков я не смог найти простой способ извлечь данные из .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 ответа
Похоже, что эти данные были написаны Pandas, поэтому используйте pd.read_hdf(), чтобы прочитать их.
h5py
получит доступ к наборам данных HDF5 как к массивам. Ваш звонок для получения ключей возвращает список имен наборов данных. Теперь, когда они у вас есть, должно быть довольно просто получить к ним доступ как к массиву и записать их. Вам нужно получить dtype, чтобы знать, что находится в каждом столбце для правильного форматирования.
Обновлено 22.05.2009, чтобы отразить содержание data.h5
размещено по ссылке в комментарии. Формат по умолчанию в np.savetxt()
является '%.18e'
, Предусмотрена очень простая (грубая) логика для изменения формата на основе dtype для этих наборов данных. Это требует более надежной проверки и форматирования dtype для общего использования. Также вам нужно будет добавить логику для декодирования юникодных строк.
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=',')