pandas教程:Binary Data Formats 二进制数据格式

编程入门 行业动态 更新时间:2024-10-27 02:24:27

pandas教程:Binary Data Formats 二进制<a href=https://www.elefans.com/category/jswz/34/1754111.html style=数据格式"/>

pandas教程:Binary Data Formats 二进制数据格式

文章目录

  • 6.2 Binary Data Formats (二进制数据格式)
  • 1 Using HDF5 Format
  • 2 Reading Microsoft Excel Files(读取微软的excel文件)

6.2 Binary Data Formats (二进制数据格式)

最简单的以二进制的格式来存储数据的方法(也被叫做serialization,序列化),就是用python内建的pickle。所有的pandas object都有一个to_pickle方法,可以用来存储数据为pickle格式:

import pandas as pd
import numpy as np
frame = pd.read_csv('../examples/ex1.csv')
frame
abcdmessage
01234hello
15678world
29101112foo
frame.to_pickle('../examples/frame_pickle')
!ls ../examples/
array_archive.npz          [31mmacrodata.csv[m[m
array_compressed.npz       mydata.csv
[31marray_ex.txt[m[m               [31mout.csv[m[m
[31mcsv_mindex.csv[m[m             [31msegismundo.txt[m[m
[31mex1.csv[m[m                    sink.txt
[31mex1.xlsx[m[m                   some_array.npy
[31mex2.csv[m[m                    [31mspx.csv[m[m
[31mex3.csv[m[m                    [31mstinkbug.png[m[m
[31mex3.txt[m[m                    [31mstock_px.csv[m[m
[31mex4.csv[m[m                    [31mstock_px_2.csv[m[m
[31mex5.csv[m[m                    [31mtest_file.csv[m[m
[31mex6.csv[m[m                    [31mtips.csv[m[m
[31mex7.csv[m[m                    tmp.txt
[31mexample.json[m[m               [31mtseries.csv[m[m
[31mfdic_failed_bank_list.html[m[m [31mvolume.csv[m[m
frame_pickle               [31myahoo_price.pkl[m[m
[31mipython_bug.py[m[m             [31myahoo_volume.pkl[m[m

用内建的pickle可以直接读取任何pickle文件,或者直接用pandas.read_pickle:

pd.read_pickle('../examples/frame_pickle')
abcdmessage
01234hello
15678world
29101112foo

注意:pickle只推荐用于短期存储。因为这种格式无法保证长期稳定;比如今天pickled的一个文件,可能在库文件更新后无法读取。

python还支持另外两种二进制数据格式:HDF5MessagePack。下面会介绍一个HDF5,但是我们鼓励你多尝试一个不同的文件格式,看看他们能有多快,是否符合你数据分析的要求。另外一些可用的存储格式有:bcolzFeather

1 Using HDF5 Format

HDF5格式是用来存储大量的科学数组数据的。这种格式还能用于其他一些语言。其中HDF表示hierarchical data format。每一个HDF5格式能春初多个数据集,并支持metadata

元数据(meta data)——“data about data” 关于数据的数据,一般是结构化数据(如存储在数据库里的数据,规定了字段的长度、类型等)。元数据是指从信息资源中抽取出来的用于说明其特征、内容的结构化的数据(如题名,版本、出版数据、相关说明,包括检索点等),用于组织、描述、检索、保存、管理信息和知识资源。

HDF5 支持多种压缩模式的on-the-fly compression(即时压缩),能让数据中一些重复的部分存储地更有效。HDF5对于处理大数据集是一个很好的选择,因为他不会把所有数据一次性读取到内存里,我们可以从很大的数组中有效率地读取一小部分。

能用PyTablesh5py来访问HDF5数据,pandas也有提供一个high-level的交互界面。HDFStore类像dict一样能用来处理low-level细节:

frame = pd.DataFrame({'a': np.random.randn(100)})store = pd.HDFStore('../examples/mydata.h5')
frame.head()
a
00.908968
1-0.589368
20.015493
30.029850
41.682180
cat ../examples/mydata.csv
one;two;three
1;2;3
4;5;6
7;8;9
store['obj1'] = framestore['obj1_col'] = frame['a']store
<class 'pandas.io.pytables.HDFStore'>
File path: ../examples/mydata.h5
/obj1                frame        (shape->[100,1])
/obj1_col            series       (shape->[100])  

HDF5中的object能用像dict一样的API来提取:

store['obj1']
a
00.908968
1-0.589368
20.015493
30.029850
41.682180
5-0.977549
60.806008
7-0.458852
8-0.833007
90.410430
10-0.232093
110.002657
12-0.642136
13-1.772356
140.411567
151.259846
16-0.730757
17-1.401318
182.984850
19-0.140144
20-0.972235
21-0.592930
221.538674
23-0.052034
240.260698
25-0.859609
261.119075
27-0.898982
280.191869
291.013184
......
700.507719
71-0.146967
720.694807
73-0.482966
741.816455
750.535113
76-1.006997
772.088429
78-0.449548
791.133784
800.413018
810.324538
821.434230
830.767194
842.073305
85-2.643750
862.330771
87-1.683786
881.631209
890.036383
900.755447
91-0.712269
92-0.914963
93-0.660928
941.465104
950.101968
960.669502
97-0.210062
98-0.453599
990.848008

100 rows × 1 columns

HDFStore支持两种存储架构,fixedtable。后者通常更慢一些,但支持查询操作:

store.put('obj2', frame, format='table')
store.select('obj2', where=['index >= 10 and index <= 15'])
a
10-1.186667
110.628998
12-0.668921
130.775731
14-1.329899
151.920832

put是存储的另一种写法,类似于之前的store['obj2'] = frame,但这种协防能让我们设置存储格式。

pandas.read_hdf函数也很方便:

frame.to_hdf('../examples/mydata.h5', 'obj3', format='table')
pd.read_hdf('../examples/mydata.h5', 'obj3', where=['index < 5'])
a
01.324210
10.770813
20.554799
3-1.741867
4-1.875071

注意:如果我们是把数据存在远端服务器上,比如Amazon S3HDFS,使用一些为分布式存储实际的二进制格式会更适合一些,比如Apache Parquet

如果是在本地处理很大数据量的话,推荐尝试PyTablesh5py看是否符合你的要求。因为很多数据分析问题都受限于I/O,所以用HDF5这样的工具能加快应用。

注意:HDF5不是数据库(database)。它最适合一次写入,多次读取的数据库。尽管数据可以在任何时间多次写入一个文件,如果多个使用者同时写入的话,文件会被破坏。

2 Reading Microsoft Excel Files(读取微软的excel文件)

pandas支持读取表格型数据(excel 2003或更高)文件,使用ExcelFile classpandas.read_excel函数。这些工具需要一些富家的包xlrdopenpyxl来分别读取XLSXLSX文件。你可以通过pipconda来安装。

使用ExcelFile,创建一个instance,通过给xlsxlsx一个路径:

xlsx = pd.ExcelFile('../examples/ex1.xlsx')

保存在sheet里的数据,可以通过parse来读取为DataFrame

pd.read_excel(xlsx, 'Sheet1')
abcdmessage
01234hello
15678world
29101112foo

如果要读取一个文件中的多个sheet,用ExcelFile会更快。但让你也能把文件名直接传递给pandas.read_excel:

frame = pd.read_excel('../examples/ex1.xlsx', 'Sheet1')
frame
abcdmessage
01234hello
15678world
29101112foo

如果要把pandas数据写为Excel格式,你必须先创建一个ExcelWrite,然后用to_excel方法:

writer = pd.ExcelWriter('../examples/ex2.xlsx')
frame.to_excel(writer, 'Sheet1')
writer.save()

如果不适用ExcelWriter的话,可以直接传给to_excel一个path

frame.to_excel('../examples/ex2.xlsx')

更多推荐

pandas教程:Binary Data Formats 二进制数据格式

本文发布于:2023-11-16 01:00:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1610443.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据格式   教程   pandas   Binary   Formats

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!