Как вы можете позаботиться о чтении Endianness из H5PY в Pandas DataFrame? - PullRequest
0 голосов
/ 11 октября 2019

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

В своей работе мы имеем дело с большими объемами данных, которые поступают из различных источников. Некоторые из этих источников используют Big Endian, а некоторые используют Small Endian. Все эти данные анализируются и сохраняются в файле h5.

Инструменты, которые я разрабатываю, используют кадры данных Pandas для различных манипуляций с данными.

Наши файлы H5 настроены вспособ, который, кажется, не работает с регулярным вызовом функции Pandas df.read_h5 () (данные не всегда имеют хорошую структуру, даже внутри файла h5). У нас есть различные функции, которые обрабатывают все сценарии, с которыми мы столкнулись, чтобы извлечь данные из файла h5. Большая часть наших данных хранится в файле h5 в виде единичных структурированных массивов или фрагментов структурированных массивов.

По существу, с Pandas возникают некоторые проблемы, когда я беру данные и пытаюсь поместить их в кадр данных. Выдается сообщение об ошибке: « ValueError: Буфер с прямым порядком байтов не поддерживается компилятором с прямым порядком байтов ». Я знаю, как это исправить, просто вызовите замену байтов в базовом массиве numpy, прежде чем поместить его в фрейм данных. Вот как я сейчас решаю эту проблему, но мне было интересно, есть ли способ прочитать данные из h5py в машинный порядок байтов, чтобы мне не пришлось беспокоиться о выполнении смены байтов.

Любые предложения будут полезны.

1 Ответ

0 голосов
/ 12 октября 2019

С h5py

In [1]: import h5py                                                             
In [2]: f = h5py.File('testendedness.h5','w')                                   
In [3]: f.create_dataset('less',data=np.arange(5.).astype('<f8'))               
Out[3]: <HDF5 dataset "less": shape (5,), type "<f8">
In [4]: f.create_dataset('greater',data=np.arange(5.).astype('>f8'))            
Out[4]: <HDF5 dataset "greater": shape (5,), type ">f8">
In [5]: f.flush()                                                               
In [6]: f.close()

и в оболочке

1409:~/mypy$ h5dump testendedness.h5
HDF5 "testendedness.h5" {
GROUP "/" {
   DATASET "greater" {
      DATATYPE  H5T_IEEE_F64BE
      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
      DATA {
      (0): 0, 1, 2, 3, 4
      }
   }
   DATASET "less" {
      DATATYPE  H5T_IEEE_F64LE
      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
      DATA {
      (0): 0, 1, 2, 3, 4
      }
   }
}
}
...