百里屠苏top  

6. 数据加载、存储和文件格式

输出输出通常包括几个大类:

  • 读取文本文件和其他更高效的磁盘存储格式;
  • 加载数据库中的数据;
  • 利用Web API 操作网络资源。

这里着重介绍pandas的输入输出对象。

 

6.1  读取文本格式的数据

pandas 提供了一些用于将表格数据读取为DataFrame 对象的函数。如下:

上面这些函数的选项可以划分为以下几个大类:

其中,类型推断(type inference)是这些函数中最重要的功能之一,也就是说不需要指定列的类型到底是数值、整数、布尔值还是字符串。

 

执行下面语句可以打开文件:

注:!cat E:\\python/ex1.csv  中cat 是UNIX shell命令,可以将csv中的原始内容打印到屏上,windows 中可以使用type 达到同样的目的。

 

结果:

读取一个以逗号分隔的(csv)文件:

 

也可以用read_table, 但需要指定分隔符:

注:并不是所有的文件都有标题,pandas可以为其分配默认的列名,也可以自定义列名(需要时自寻)。

 

有些表格可能不是用固定的分隔符去分隔字段的(比如空白符或其他模式)。对于这种情况,可以编写一个正则表达式来作为read_table的分隔符。

 

read_csv / read_table 函数的参数:

 

 

6.2 逐块读取文本文件

在处理很大的文件时,我们可能只想读取文件的一部分或者逐块对文件进行迭代。

如下面这个表:

 

如果只想读取几行,通过nrows 进行指定即可:

注:逐块读取文件,需要设置chunksize(格式同上),TextParser 还有一个get_chunk 方法,可以读取任意大小的块。

 

6.3 将数据写到文本格式

1)利用DataFrame 的to_csv 方法,可以将数据写到一个以逗号分隔的文件中。

结果:

 

2)可以使用其他分隔符;data.to_csv(…,sep=’|’)

 

3)缺失值在输出结果中会被表示为空字符串,你可能希望将其表示为别的标记值:

data.to_csv(…,na_rep=’NULL);

 

4) 若果没有设置其他选项,则会写出行和列的标签。当然,他们也都可以被禁用:

data.to_csv(…,index=False,header=False);

 

5) 还可以只写出一部分的列,并且可以指定顺序:

data.to_csv(…,index=False,cols =[‘a’, ‘b’, ‘c’]);

 

6) Series 也有一个to_csv 方法。需要时可查看to_csv 和from_csv 方法。

 

6.4 手工处理分隔符格式

      大部分存储在磁盘上的表格型数据都能用pandas.read_table 进行加载,然而,有时候还需要做一些手工处理。对于任何单字符分隔符文件,可以直接使用python内置的csv模块。

1)csv 语支选项:

 

2)要手工输出分隔符文件,可以使用csv.writer.

 

6.5  JSON 数据

       JSON(JavaScript  Object  Notation)已经成为通过HTTP 请求在Web 浏览器和其他应用程序之间发送数据的标准格式之一。他是一种比表格型文本格式(如CSV)灵活的多的数据格式。

 

obj = """
{"name":"wes",
"places_lived":["US","Spain","Germany"],
"pet":null,
"siblings":[{"name":"Scott","age":25,"pet":"Zuko"},
            {"name":"Katie","age":33,"pet":"Cisco"}]
}
"""

如上,JSON 非常接近于有效的Python 代码。基本类型有对象(字典)、数组(列表)、字符串、数值、布尔值以及null。对象中所有的键都必须是字符串。许多Python 库都可以读写JSON数据。

 

1) 、将JSON 字符串转换成 Python格式:json.loads()

 

 

 

2) 、将Python对象转换成 JSON 格式:json.dumps()

 

 

 

如何将json 对象转换为 DataFrame 或其他便于分析的数据结构就由你决定了,最简单的方式是:向DataFrame 构造器传入一组JSON 对象,并选取数据字段的子集。

 

 

 

6.6 XML 和HTML : Web 信息收集

Python 有许多可以读写HTML 和XML  格式数据的库。lxml 就是其中之一。

本节内容:

  • 用lxml.html 处理HTML ;
  • 用lxml.objectify 做一些XML 处理。

(待补充)

 

6.7  二进制数据格式

使用Python内置的pickle 序列化,可以实现数据的二进制格式存储。为了使用方便,pandas 对象都有一个用于将数据以 pickle 形式保存到磁盘上的save 方法

也可以使用pandas.load 将数据读回Python。

 

6.8 使用 HDF5 格式

很多工具都能实现高效读写磁盘上以二进制格式存储的科学数据。HDF5 就是其中一个流行的工业级库,它是一个C 库,带有许多语言的接口,如 Java 、Python 和MATLAB等。

HDF5 中的 HDF指的是层次型数据格式(hierarchical  data  format)。每个HDF5 文件都含有一个文件系统式的节点结构,它使你能够存储多个数据集并支持元数据。

 

Python 中的HDF5  库有两个接口:

    • PyTables 
    • h5py

(详见参考文档)

 

6.9  读取Excel 文件

pandas 的ExcelFile 类支持读取存储在Excel 2003(或者更高版本)中的表格型数据。由于ExcelFile 用到了xlrd  和openpyxl 包,所以得先安装。

通过传入一个xls  或 xlsx 文件的路径即可创建一个ExcelFile 实例:

xls_file = pd.ExcelFile ('data.xls')

 

存放在某个工作表中的数据可以通过parse 读取到DataFrame 中:

table = xls_file.parse('Sheet1')

 

6.10  使用数据库

详见参考文档

posted on 2020-01-12 17:13  百里屠苏top  阅读(198)  评论(0编辑  收藏  举报