文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在pandas中利用hdf5高效存储数据

2024-12-10 16:23

关注

HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式。

其文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一个HDF5可以看做一个高度整合的文件夹,其内部可存放不同类型的数据。

在Python中操纵HDF5文件的方式主要有两种,一是利用pandas中内建的一系列HDF5文件操作相关的方法来将pandas中的数据结构保存在HDF5文件中,二是利用h5py模块来完成从Python原生数据结构向HDF5格式的保存。

本文就将针对pandas中读写HDF5文件的方法进行介绍。

图1

二、利用pandas操纵HDF5文件

1. 写出文件

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

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

  1. import pandas as pd 
  2.  
  3. store = pd.HDFStore('demo.h5') 
  4. '''查看store类型''' 
  5. print(store) 

图2

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

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

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

图3

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

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

图4

第一种方式利用键值对将不同的数据存入store对象中:

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

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

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

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

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

  1. store.items 

图5

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

  1. store['df'] 

图6

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

  1. store.remove('s') 

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

  1. del store['s'] 

这时若想将当前的store对象持久化到本地,只需要利用close()方法关闭store对象即可,而除了通过定义一个确切的store对象的方式之外,还可以从pandas中的数据结构直接导出到本地h5文件中:

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

图7

2. 读入文件

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

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

图8

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

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

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

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

图9

把IO对象关闭后再次提取:

  1. store.close() 
  2. print(store.is_open) 
  3. df = pd.read_hdf('demo.h5',key='df'
  4. df 

图10

3. 性能测试

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

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

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

图11

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

图12

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

  1. import pandas as pd 
  2. import time 
  3.  
  4. start1 = time.clock() 
  5. store = pd.HDFStore('store.h5',mode='r'
  6. df1 = store.get('df') 
  7. print(f'HDF5读取用时{time.clock()-start1}秒') 
  8. start2 = time.clock() 
  9. df2 = pd.read_csv('df.csv') 
  10. print(f'csv读取用时{time.clock()-start2}秒') 

图13

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

 

来源:Python大数据分析内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯