利用Python进行数据分析| 6 数据加载、存储与文件格式

利用Python进行数据分析| 6 数据加载、存储与文件格式

读写文本格式的数据

逐块读取文本文件

如果只想读取几行(避免读取整个文件),通过nrows进⾏指定

要逐块读取文件,可以指定chunksize(行数)

read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代

将数据写出到文本格式

.to_csv()

处理分隔符格式

单字符分隔符文件, 直接使用Python内置的csv模块

XML和HTML:Web信息收集

Python有许多可以读写常见的HTML和XML格式数据的库,包括lxml、Beautiful Soup和html5lib。lxml的速度比较快,但其它的库处理有误的HTML或XML文件更好。 pandas有一个内置的功能,read_html,它可以使用lxml和Beautiful Soup自动将HTML文件中的表格解析为DataFrame对象。

pandas.read_html()

利用lxml.objectify解析XML

XML(Extensible Markup Language)是另一种常见的支持分层、嵌套数据以及元数据的结构化数据格式。 先用lxml.objectify解析该文件,然后通过getroot得到该XML文件的根节点的引用 。  root.INDICATOR返回一个用于产生各个XML元素的生成器。

 

 

 二进制数据格式

实现数据的高效二进制格式存储最简单的办法之一是使用Python内置的pickle序列化。pandas对象都有一个用于将数据以pickle格式保存到磁盘上的to_pickle方法:

pickle仅建议用于短期存储格式。其原因是很难保证该格式永远是稳定的;今天pickle的对象可能无法被后续版本的库unpickle出来。

pandas内置支持两个二进制数据格式:HDF5和MessagePack

  • bcolz:一种可压缩的列存储二进制格式,基于Blosc压缩库。
  • Feather:与R语言社区的Hadley Wickham设计的一种跨语言的列存储文件格式。Feather使用了Apache Arrow的列式内存格式。

使用HDF5格式

HDF5是一种存储大规模科学数组数据的非常好的文件格式。它可以被作为C标准库,带有许多语言的接口,如Java、Python和MATLAB等。HDF5中的HDF指的是层次型数据格式(hierarchical data format)。每个HDF5文件都含有一个文件系统式的节点结构,它使你能够存储多个数据集并支持元数据。与其他简单格式相比,HDF5支持多种压缩器的即时压缩,还能更高效地存储重复模式数据。对于那些非常大的无法直接放入内存的数据集,HDF5就是不错的选择,因为它可以高效地分块读写。

HDFStore支持两种存储模式,"fixed"和"table"。后者通常会更慢,但是支持使用特殊语法进行查询操作

HDF5不是数据库。它最适合用作“一次写多次读”的数据集。虽然数据可以在任何时候被添加到文件中,但如果同时发生多个写操作,文件就可能会被破坏。

 

读取Microsoft Excel文件

pandas的ExcelFile类或pandas.read_excel函数支持读取存储在Excel 2003(或更高版本)中的表格型数据。这两个工具分别使用扩展包xlrd和openpyxl读取XLS和XLSX文件。

 pd.ExcelFile()

read_excel()

write_excel()

Web APIs交互

 

许多网站都有一些通过JSON或其他格式提供数据的公共API。通过Python访问这些API的办法有不少。一个简单易用的办法(推荐)是requests包(http://docs.python-requests.org)。

数据库交互

 

在商业场景下,大多数数据可能不是存储在文本或Excel文件中。基于SQL的关系型数据库(如SQL Server、PostgreSQL和MySQL等)使用非常广泛,其它一些数据库也很流行。数据库的选择通常取决于性能、数据完整性以及应用程序的伸缩性需求。

SQLAlchemy项目是一个流行的Python SQL工具,它抽象出了SQL数据库中的许多常见差异。pandas有一个read_sql函数,可以轻松的从SQLAlchemy连接读取数据。