python3_pandas.HDFStore_h5py_vaex_HDF5_的筆記


python3_pandas.HDFStore_h5py_HDF5_的筆記

轉載注明來源: 本文鏈接 來自osnosn的博客,寫於 2020-03-26.


h5py 的部分筆記

  • h5py 讀出屬性(attrs),請參考 python3_h5py_hdf5_遍歷_查看文件結構
  • h5py 寫入屬性(attrs) hdf=h5py.File('xxx.hdf5','w')
    • 在root創建屬性 hdf.attrs.create('myAttrsName',data='xxxxxx',dtype='S64')
      • dtype 用'S32'=32字節字符串,'f8'=float64, 'i4'=int32, ...
    • 在其他節點創建屬性dnode=hdf.create_dataset(..) , gnode=hdf.create_group(..)
      • dnode.attrs.create('myAttrsName',data='xxxxxx',dtype='S64')
      • gnode.attrs.create('myAttrsName',data='xxxxxx',dtype='S64')
    • ...attrs.create(..) 中,data=的值中含有dtype,則不用另外指定dtype。否則建議指定 dtype 為numpy支持的類型。
    • h5py 的文檔有詳細描述 h5py.Attributes
  • h5py 說 從2.4開始就有全局鎖,實現了線程安全。

pandas.HDFStore 的部分筆記

  • HDFStore 可以保存Series,DataFrame。
    • 保存格式 fixed,不能添加(append),只能覆蓋(重寫)
    • 保存格式 table,可以添加(append),可以覆蓋(重寫)
    • 保存的 DataFrame 的 column 超過 8320 個列(具體限制沒找到,也可能是 8448),就無法保存到hdf5中(會出錯)。
      保存前,可以考慮先 T 變換一下。但 column 名如果不是數字,可能 T 變換會失敗。
  • HDFStore 打開mode='w'時。會truncate文件,從零開始。
  • HDFStore 打開mode='a'時。為修改模式。
    • 用put覆蓋fixed表(內容不變),文件也會增大。增大的比table表多。
    • 用put覆蓋table表(內容不變),文件也會增大。增大的比fixed表少。
  • HDFStore 讀出屬性(attrs) hdf=pandas.HDFStore('xxx.hdf5','r') 以下任意一款都能用。
    • aa=hdf.root.group2._v_attrs.MyAttr
    • aa=hdf.get_node('/group2')._v_attrs.MyAttr
    • aa=hdf.get_node('/group2')._v_attrs['MyAttr']
  • HDFStore 寫入屬性(attrs) hdf=pandas.HDFStore('xxx.hdf5','w') 以下任意一款都能用。
    • hdf.root.group2._v_attrs.MyAttr='中文文字'
    • hdf.get_node('/group2')._v_attrs.MyAttr=u'中文文字'
    • hdf.get_node('/group2')._v_attrs['MyAttr']='english text'
    • HDFStore 寫入屬性的路徑如果不存在,需要先行創建。否則會出錯。
      • hdf._handle 似乎就是 pytable 的底層接口,hdf._handle.create_group()就是pytable的函數。
#在root上創建group。
if 'mygroup' not in hdf.root._v_groups.keys():
    hdf._handle.create_group('/','mygroup')
#在其他路徑上創建group。
if 'mygroup' not in hdf.get_node('/othergroup')._v_groups.keys():
    hdf._handle.create_group('/othergroup','mygroup')
  • HDFStore 的屬性(attrs), 支持保存 list, tuple, class object, str, int, float
    • bool 保存到 attrs 中是 Bitfield, h5py讀不出.
  • 屬性可以加在任意一層GROUP上,也可以加在root('/')上。
  • 屬性的讀取/寫入在pandas-1.0.3,tables-3.6.1 測試過。
  • pandas.HDFStore 的文檔寫的很簡單。屬性的操作要看pytables的文檔,可是pytables的文檔也寫的不詳細。
  • HDFStore是基於pytable。pytable說,可多個同時讀,不支持多個寫,不支持一個寫的同時讀。會出錯。建議等寫完了,再重寫打開來讀,否則會讀的不完整,而出錯。
    • 多進程, 建議自己創建個文件上鎖/解鎖。
    • 多線程, 用線程鎖解決沖突。

vaex

  • 支持打開超過內存大小的hdf5文件,用內存映射。 打開csv沒有效果。
  • centos8中,用 pip3.6 安裝vaex失敗。

轉載注明來源: 本文鏈接 來自osnosn的博客.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM