首页 > 其他 > 详细

pandas HDF5与EXCEL文件

时间:2020-04-16 09:35:48      阅读:69      评论:0      收藏:0      [点我收藏+]

一、HDF5

HDF5是一个备受好评的文件格式,广泛用于存储大量的科学计算数组。很多数据分析的实际工作中困难都在于I/O密集,而不是CPU密集,使用HDF5这样的工具可以大大加速你的应用。它以C库的形式提供,并且具有许多其它语言的接口,包括Java、MATLAB和Python。HDF5中的HDF代表分层数据格式。每个HDF5文件可以存储多个数据集并且支持元数据。支持多种压缩模式的即时压缩,使得重复模式的数据可以更高效地存储。HDF5适用于处理不适合在内存中存储地超大型数据,可以使你高效读写大型数据的一小块。

要注意的是HDF5并不是数据库,它是一种适合一次写入多次读取的数据集。尽管数据可以在任何时间添加到文件中,但如果多个写入者持续写入,文件可能会损坏。

在外部,可以通过使用PyTables或h5py等库直接访问HDF5文件,但Pandas提供了一个高阶的接口,可以简化存储过程。

Pandas使用HDFStore类来实现这一功能,类似字典一样的工作方式:

In [90]: df = pd.DataFrame({a:np.random.randn(100)})  # 有100行
In [91]: df.head() # 看看前5行
Out[91]:
          a
0 -0.917062
1  0.797327
2  0.659787
3 -0.779638
4  0.550464
In [92]: store = pd.HDFStore(mydata.h5) # 生成HDF5文件
In [93]: store[obj1] = df  # 以类似字典的方式,向文件里写入内容
In [94]: store[obj1_col] = df[a] # 再写一点
In [95]: store   # 看看信息,在当前工作目录下,你可以找到这个文件
Out[95]:
<class pandas.io.pytables.HDFStore>
File path: mydata.h5

既然是类似字典的工作方式,那当然也可以像字典那样索引数据:

In [97]: store[obj1]
Out[97]:
           a
0  -0.917062
1   0.797327
2   0.659787
3  -0.779638
4   0.550464
..       ...
95 -2.042226
96  1.286631
97  0.487709
98 -0.202580
99  1.619085

[100 rows x 1 columns]

HDFStore支持两种工作模式,‘fixed’和‘table’。table的速度更慢,但支持一种类似数据库SQL语言的查询操作:

In [98]: store.put(obj2,df,format=table) # put是赋值的显式版本,允许我们设置其它选项
In [99]: store.select(obj2, where=[index >=10 and index <= 15])  # 类似SQl语言的查询操作,要注意空格的位置
Out[99]:
           a
10 -1.430696
11 -0.616732
12 -0.643991
13 -0.004270
14  0.797136
15 -0.175095
In [100]: store.close() # 关闭文件

除此之外,Padas还提供了以上操作的快捷方式:

In [101]: df.to_hdf(mydata.h5,obj3, format=table)
In [102]: pd.read_hdf(mydata.h5, obj3 ,where=[index < 5])
Out[102]:
          a
0 -0.917062
1  0.797327
2  0.659787
3 -0.779638
4  0.550464

二、Excel文件

Pandas支持Excle 2003或更高版本文件的读写。在内部,这需要使用附加包xlrd和openpyxl来分别读取XLS和XLSX文件。如果你的环境中没有这两个包,可能需要使用pip或者conda手动安装一下。

使用很简单,看下面的例子:

In [104]: xlsx = pd.ExcelFile(d:/ex1.xlsx) # 打开excel文件
In [105]: pd.read_excel(xlsx, Sheet1) # 读取指定的表
Out[105]:
   a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo

或者使用更简洁的语法:

In [106]: df = pd.read_excel(d:/ex1.xlsx, Sheet1)
In [107]: df
Out[107]:
   a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo

将pandas数据写回到excel文件中时,你必须先生成一个ExcelWriter,然后使用to_excel方法将数据写入:

In [108]: writer = pd.ExcelWriter(d:/ex2.xlsx) # 生成文件

In [109]: df.to_excel(writer, Sheet1) # 写入

In [110]: writer.save()  #关闭文件

当然,也可以使用快捷操作:

In [112]: df.to_excel(d:/ex3.xlsx)

pandas HDF5与EXCEL文件

原文:https://www.cnblogs.com/lavender1221/p/12710460.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!