HDF5 dfs в массив Numpy — не может выполнять операции numpy

#python #numpy #hdf5 #h5py #pytables

Вопрос:

Я загрузил файл HDF5 из магазина Pandas и ввел их все как np.float64 со следующим кодом:

 dtypes = np.dtype([('methane_emission', np.float64), 
                   ('no2_emission', np.float64), ('co2_emission', np.float64)])

for i in range(len(ccodes)):
    ccode = ccodes[i]
    df = store.get(ccode)
    df = df.drop(columns='year')
    dset = f1.create_dataset(ccode, data=df.astype(dtypes))
 

Затем следующий код выдает мне следующую ошибку.

 f1 = h5py.File('file.h5', 'r')
a = np.array(f1['xxx']).flatten()
a.astype(np.float64).sum(axis=0)
 

Не удается привести данные массива из dtype([(‘methane_emission’, ‘<f8’), (‘no2_emission’, ‘<f8’), (‘co2_emission’, ‘

Комментарии:

1. Похоже на structured массив. Смотрите соответствующую страницу документов numpy.

2. numpy.org/doc/stable/user/…

3. Составные наборы данных HDF5 возвращаются в виде повторных снимков. Чтобы получить доступ к каждому полю(столбцу), необходимо указать имя набора данных и имя поля. Вот 1 способ сделать это: arr = f1[ccode]['methane_emission'][:] ; arr.sum() ; затем повторите для «no2_emission» и «co2_emission». (Я использовал ccode b/c, я не был уверен, что ваше 'xxx' имя на самом деле является именем набора данных.) Я думаю, что вы также можете сделать это: arr = f1[ccode][:] ; arr['methane_emission'].sum() ; затем повторите для остальных 2.