一、简介

HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式,文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一个HDF5可以看做一个高度整合的文件夹,其内部可存放不同类型的数据。在Python中操纵HDF5文件的方式主要有两种,一是利用pandas中内建的一系列HDF5文件操作相关的方法来将pandas中的数据结构保存在HDF5文件中,二是利用h5py模块来完成从Python原生数据结构向HDF5格式的保存,本文就将针对pandas中读写HDF5文件的方法进行介绍。

二、利用pandas操纵HDF5文件

2.1 写出

pandas中的HDFStore()用于生成管理HDF5文件IO操作的对象,其主要参数如下:

path:字符型输入,用于指定h5文件的名称(不在当前工作目录时需要带上完整路径信息)

mode:用于指定IO操作的模式,与Python内建的open()中的参数一致,默认为’a’,即当指定文件已存在时不影响原有数据写入,指定文件不存在时则新建文件;‘r’,只读模式;‘w’,创建新文件(会覆盖同名旧文件);‘r+’,与’a’作用相似,但要求文件必须已经存在;

complevel:int型,用于控制h5文件的压缩水平,取值范围在0-9之间,越大则文件的压缩程度越大,占用的空间越小,但相对应的在读取文件时需要付出更多解压缩的时间成本,默认为0,代表不压缩

下面我们创建一个HDF5 IO对象store:

import pandas as pdstore = pd.HDFStore('demo.h5')
'''查看store类型'''
print(store)

可以看到store对象属于pandas的io类,通过上面的语句我们已经成功的初始化名为demo.h5的的文件,本地也相应的出现了如下的文件:

接下来我们创建pandas中不同的两种对象,并将它们共同保存到store中,首先创建series对象:

import numpy as np#创建一个series对象
s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
s


接着我们创建一个dataframe对象:

#创建一个dataframe对象
df = pd.DataFrame(np.random.randn(8, 3),columns=['A', 'B', 'C'])
df


第一种方式利用键值对将不同的数据存入store对象中,这里为了代码简洁使用了元组赋值法:

store['s'],store['df'] = s,df

第二种方式利用store对象的put()方法,其主要参数如下:

key:指定h5文件中待写入数据的key

value:指定与key对应的待写入的数据

format:字符型输入,用于指定写出的模式,'fixed’对应的模式速度快,但是不支持追加也不支持检索;'table’对应的模式以表格的模式写出,速度稍慢,但是支持直接通过store对象进行追加和表格查询操作

使用put()方法将数据存入store对象中:

store.put(key='s',value=s);store.put(key='df',value=df)

既然是键值对的格式,那么可以查看store的items属性(注意这里store对象只有items和keys属性,没有values属性):

store.items


调用store对象中的数据直接用对应的键名来索引即可:

store['df']


删除store对象中指定数据的方法有两种,一是使用remove()方法,传入要删除数据对应的键:

store.remove('s')
print(store.keys())

二是使用Python中的关键词del来删除指定数据:

del store['s']
print(store.keys())

打印出的结果都如下:

这时若想将当前的store对象持久化到本地,只需要利用close()方法关闭store对象即可:

store['df']


删除store对象中指定数据的方法有两种,一是使用remove()方法,传入要删除数据对应的键:

store.remove('s')
print(store.keys())

二是使用Python中的关键词del来删除指定数据:

del store['s']
print(store.keys())

打印出的结果都如下:

这时若想将当前的store对象持久化到本地,只需要利用close()方法关闭store对象即可:

store.close()
'''查看store连接状况,False则代表已关闭'''
store.is_open


 这时本地的h5文件也相应的存储进store对象关闭前包含的文件:

除了通过定义一个确切的store对象的方式,还可以从pandas中的数据结构直接导出到本地h5文件中:

#创建新的数据框
df_ = pd.DataFrame(np.random.randn(5,5))
#导出到已存在的h5文件中,这里需要指定key
df_.to_hdf(path_or_buf='demo.h5',key='df_')
#创建于本地demo.h5进行IO连接的store对象
store = pd.HDFStore('demo.h5')
#查看指定h5对象中的所有键
print(store.keys())

2.2 读入

在pandas中读入HDF5文件的方式主要有两种,一是通过上一节中类似的方式创建与本地h5文件连接的IO对象,接着使用键索引或者store对象的get()方法传入要提取数据的key来读入指定数据:

store = pd.HDFStore('demo.h5')
'''方式1'''
df1 = store['df']
'''方式2'''
df2 = store.get('df')
df1 == df2


可以看出这两种方式都能顺利读取键对应的数据。

第二种读入h5格式文件中数据的方法是pandas中的read_hdf(),其主要参数如下:

path_or_buf:传入指定h5文件的名称

key:要提取数据的键

需要注意的是利用read_hdf()读取h5文件时对应文件不可以同时存在其他未关闭的IO对象,否则会报错,如下例:

print(store.is_open)
df = pd.read_hdf('demo.h5',key='df')


store.close()
print(store.is_open)
df = pd.read_hdf(‘demo.h5’,key=‘df’)
df

2.3 速度比较

这一小节我们来测试一下对于存储同样数据的csv格式文件、h5格式的文件,在读取速度上的差异情况:

这里我们首先创建一个非常大的数据框,由一亿行x5列浮点类型的标准正态分布随机数组成,接着分别用pandas中写出HDF5和csv格式文件的方式持久化存储:

import pandas as pd
import numpy as np
import timestore = pd.HDFStore('store.h5')
#生成一个1亿行,5列的标准正态分布随机数表
df = pd.DataFrame(np.random.rand(100000000,5))
start1 = time.clock()
store['df'] = df
store.close()
print(f'HDF5存储用时{time.clock()-start1}秒')
start2 = time.clock()
df.to_csv('df.csv',index=False)
print(f'csv存储用时{time.clock()-start2}秒')


在写出同样大小的数据框上,HDF5比常规的csv快了将近50倍,而且两者存储后的文件大小也存在很大差异:


csv比HDF5多占用将近一倍的空间,这还是在我们没有开启HDF5压缩的情况下,接下来我们关闭所有IO连接,运行下面的代码来比较对上述两个文件中数据还原到数据框上两者用时差异:

import pandas as pd
import timestart1 = time.clock()
store = pd.HDFStore('store.h5',mode='r')
df1 = store.get('df')
print(f'HDF5读取用时{time.clock()-start1}秒')
start2 = time.clock()
df2 = pd.read_csv('df.csv')
print(f'csv读取用时{time.clock()-start2}秒')


 HDF5用时仅为csv的1/13,因此在涉及到数据存储特别是规模较大的数据时,HDF5是你不错的选择。

以上就是本文的全部内容,如有笔误望指出!
https://www.cnblogs.com/feffery/p/11135082.html

利用pandas读写HDF5文件相关推荐

  1. 用pandas读写HDF5文件

    hdf5简介 HDF5是一种专门用于存储表格数据阵列的高性能存储格式.Pandas的HDFStore类可以将DataFrame存储在HDF5文件中,以便可以有效地访问它,同时仍保留列类型和其他元数据. ...

  2. python pandas 读写 csv 文件

    python pandas 读写 csv 文件 具体看官方文档 https://www.pypandas.cn/docs/user_guide/io.html#csv-文本文件 import pand ...

  3. python 将excel文件转换为txt文件_python利用pandas将excel文件转换为txt文件的方法

    python将数据换为txt的方法有很多,可以用xlrd库实现.本人比较懒,不想按太多用的少的插件,利用已有库pandas将excel文件转换为txt文件. 直接上代码: ''' function:将 ...

  4. python excel文件转换成字符串_python利用pandas将excel文件转换为txt文件的方法

    python将数据换为txt的方法有很多,可以用xlrd库实现.本人比较懒,不想按太多用的少的插件,利用已有库pandas将excel文件转换为txt文件. 直接上代码: ''' function:将 ...

  5. python pandas读取excel-Python使用Pandas读写EXCEL文件教程

    欢迎,来自IP地址为:211.103.135.163 的朋友 教程开始之前,我们需要首先了解一下什么是Excel,这有助于理解之后教程中的内容. 什么是Excel Excel  是微软出品的和款办公软 ...

  6. Python使用Pandas读写EXCEL文件教程

    https://www.daehub.com/archives/9463.html 教程 开始之前,我们需要首先了解一下什么是Excel,这有助于理解之后教程中的内容. 什么是Excel Excel  ...

  7. python 读excel pandas_Python使用Pandas读写EXCEL文件教程

    欢迎,来自IP地址为:140.250.89.180 的朋友 教程开始之前,我们需要首先了解一下什么是Excel,这有助于理解之后教程中的内容. 什么是Excel Excel  是微软出品的和款办公软件 ...

  8. R语言rhdf5读写hdf5文件(.h5)展示文件组织结构和数据索引

    h5只是一种简单的数据组织格式[层级数据存储格式(HierarchicalDataFormat:HDF)],该格式被设计用以存储和组织大量数据. 在一些单细胞文献中,作者通常会将分析的数据上传到GEO ...

  9. 利用IDL读取HDF5文件

    首先是要了解HDF5文件的结构,利用pannoly文件能快速浏览文件的信息和命名,pannoly里面显示的数组行列和波段和IDL反过来的,IDL是 数组[列][行][波段] pannoly是数组(波段 ...

最新文章

  1. matlab自动加坐标,matlab自动驾驶系统-坐标系
  2. 【Android 启动过程】Activity 启动源码分析 ( Activity -> AMS、主线程阶段 )
  3. 画出该lti系统的幅频特性响应曲线_一文带你通俗理解幅频响应和相频响应
  4. WebRTC 中收集音视频编解码能力
  5. 大数据和云计算涉及的技术_云计算涉及的风险
  6. mysql运营_为线上运营Mysql数据库设置从库
  7. mysql-表关系模型,一对一,一对多,多对多
  8. RabbitMQ学习之队列监控
  9. 计算机主机拆解,计算机硬件系统及主机拆解..ppt
  10. Android使用ksoap2调用C#中的webservice实现图像上传
  11. access怎么查询工龄_电子商务专业怎么样?学什么?前景好吗?
  12. 阿古斯机器人_炉石传说三选一卡池全部卡牌一览 挑战之旅冒险模式攻略
  13. u盘启动盘 联想服务器TS250 Win Server 2016 下 安装Linux(ubuntu-18.04.1-desktop-amd64)双系统 各种问题总结(2018-11-13)
  14. python 表情包 网站源码_Python实现表情包的代码实例
  15. 分类模型的再考以及随机森林的应用
  16. 芯邦主控芯片CBM2199E量产工具设置
  17. PIESDKDoNet二次开发配置注意事项
  18. 如何关闭windows杀毒软件
  19. 魔兽世界怀旧服2020年最新服务器列表,2020年2月15日魔兽世界怀旧服服务器的排队等待时间的真实数据...
  20. 傻瓜攻略(九)——MATLAB实现简单的多元线性回归(以炼钢转炉炉龄问题为例)

热门文章

  1. RSA签名算法,计算调用加密报文,安全传输
  2. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
  3. 2022-2028年中国氟橡胶产业竞争现状及发展前景分析报告
  4. 【转载】首次作品展小结
  5. 汇编语言中将数据、代码、栈放入不同的段
  6. LeetCode简单题之生成每种字符都是奇数个的字符串
  7. CodeGen按钮循环
  8. Python分析离散心率信号(中)
  9. 人工智能在音频链中找到自己的声音
  10. python 把2个列表或者2个元组转成字典