http://www.cnblogs.com/batteryhp/p/5021858.html

输入输出一般分为下面几类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据。利用Web API操作网络资源。

1、读写文本格式的数据

自己感觉读写文件有时候“需要运气”,经常需要手工调整。因为其简单的文件交互语法、直观的数据结构,以及诸如元组打包解包之类的便利功能,Python在文本和文件处理方面已经成为一门招人喜欢的语言。pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。见下表:

下面大致介绍一下这些函数在文本数据转换为DataFrame时的一些技术。可以分为一下几类:

  • 索引:将一个或者多个列当作返回的DataFrame处理,以及是否从文件、用户获取列名。
  • 类型推断和数据转换:包括用户定义值的转换、缺失值标记列表等。
  • 日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合成结果中的单个列。
  • 迭代:支持对大文件进行逐块迭代。
  • 不规整数据问题:跳过一些行、页脚、注释或者其他不要的东西

pandas读取文件会自动推断数据类型,不用指定。

read_csv为例

用names重新规定列名,用index_col指定索引,也可以将多个列组合作为层次化索引。可以编写正则表达式规定分隔符。用skiprows跳过某些行。pandas会用NA、-1.#IND、NULL等进行标记。用na_values用来不同的NA标记值。下面是read_csv/read_table参数:

逐块读取文本文件

处理很大的文件时,或找出大文件中的参数集以便于后续处理时,可能只想读取一部分或者逐块对文件进行迭代。nrows指定读取多少行。要逐块读取文件,需要设置chunksize(行数)。

将数据写出到文本格式

用to_csv方法写出到csv文件中。参数sep标明分隔符。na_rep标明空白字符串的代替值。index header标明是否写出行列标签,默认是写出。用cols限制并以指定顺序写出某些列。

Series也有to_csv方法。用一些整理工作(无header行,第一列作索引)就能用read_csv读取为Series,当然还有一个更方便的from_csv,Series.from_csv。

手工处理分隔符格式

有些奇葩文件需要进行处理以后再读。Python内置的csv模块可以读取任何单字符分隔符文件。将打开的文件传递给csv.reader。csv文件的形式有很多,只需定义csv.Dialect的一个子类即可定义新格式(如专门的分隔符、字符串引用约定、行结束符等):

  1. #-*- encoding:utf-8 -*-
  2. import numpy as np
  3. import os
  4. import pandas as pd
  5. from pandas import Series,DataFrame
  6. import matplotlib.pyplot as plt
  7. import pandas.io.data as web
  8. import csv
  9.  
  10. f = open('ex6.csv')
  11. reader = csv.reader(f)
  12. for line in reader:
  13. print line
  14. lines = list(csv.reader(open('ex7.csv')))
  15. header,values = lines[0],lines[1:]
  16. print header
  17. print values
  18. #下面的 * 应该是取出值的意思
  19. data_dict = {h:v for h,v in zip(header,zip(*values))}
  20. print data_dict
  21. class my_dialect(csv.Dialect):
  22. lineterminator = '\n'
  23. delimiter = ';'
  24. quotechar = '"'
  25.  
  26. reader = csv.reader(f,dialect=my_dialect)
  27. #csv语支的参数也可以用参数的形式给出
  28. reader = csv.reader(f,delimiter = '|')

对于那些使用复杂分隔符或多字符分隔符的文件,csv文件就无能为力了。这种情况下用split或者re.split进行拆分合整理工作。要手工输出分隔符文件,可以使用csv.writer。它接受一个已打开且可写的文件对象以及跟cav.reader相同的那些语支和格式化选项。

  1. #-*- encoding:utf-8 -*-
  2. import numpy as np
  3. import os
  4. import pandas as pd
  5. from pandas import Series,DataFrame
  6. import matplotlib.pyplot as plt
  7. import pandas.io.data as web
  8. import csv
  9.  
  10. with open('mydata.csv','w') as f:
  11. writer = csv.writer(f,lineterminator = '\n')
  12. writer.writerow(('one','two','three'))
  13. writer.writerow(('1','2','3'))

JSON数据

除空值null和一些其他的细微差别(如列表末尾不允许存在多余的逗号)之外,JSON非常接近有效Python代码。基本数据类型有对象(字典)、数组(列表)、字符串、数值、布尔值以及NULL。对象中所有的键都必须是字符串(非常重要)。用json模块,json.loads可以将字符串转换成Python形式,即可以将对象读取为python字典。

相反的,json.dumps可以将python对象转换为json格式。

XML和HTML:Web信息收集

lxml可以读取xml和html格式数据并处理。这部分用到的时候再研究。

2、二进制数据文件

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

  1. #-*- encoding:utf-8 -*-
  2. import numpy as np
  3. import os
  4. import pandas as pd
  5. from pandas import Series,DataFrame
  6. import matplotlib.pyplot as plt
  7. import pandas.io.data as web
  8. import csv
  9.  
  10. frame = pd.read_csv('ex1.csv')
  11. print frame
  12. frame.save('frame_pickle') #存储为二进制文件
  13. ok = pd.load('frame_pickle') #load函数
  14. #ok1 = pd.read_table('frame_pickle') #不能用read_table函数
  15. #print ok1
  16. print ok

pickle,作者建议用作短期存储,因为会遇到解析版本问题。

使用HDF5格式

很多工具都能实现高效读写磁盘上以二进制格式存储的科学数据。HDF5就是一个流行工业级库,是一个C库,有Java、Python、MATLAB等多种接口。这部分暂时不看。

读取Excel数据

支持excel2003及更高版本的excel文件。用pandas中的ExcelFile类即可,需要安装xlrd和openpyxl包。

  1. #-*- encoding:utf-8 -*-
  2. import numpy as np
  3. import os
  4. import pandas as pd
  5. from pandas import Series,DataFrame
  6. import matplotlib.pyplot as plt
  7. import pandas.io.data as web
  8. import csv
  9.  
  10. xls_file = pd.ExcelFile('ex1.xlsx')
  11. table = xls_file.parse('ex1')
  12. print table

使用HTML和Web API

许多网站都有一些通过JSON或其他格式提供数据的公共API。用requests包等可以实现。这部分暂时不看。

使用数据库

数据从SQL中加载到DataFrame比较简单,此外pandas还有一些能够简化该过程的函数。作者是用一款SQLite数据库,用sqlite3驱动器。作者还举了MongoDB中数据的例子。暂时不看。

《利用python进行数据分析》读书笔记--第六章 数据加载、存储与文件格式的更多相关文章

  1. 《利用Python进行数据分析》笔记---第6章数据加载、存储与文件格式

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  2. 利用python进行数据分析之数据加载存储与文件格式

    在开始学习之前,我们需要安装pandas模块.由于我安装的python的版本是2.7,故我们在https://pypi.python.org/pypi/pandas/0.16.2/#downloads ...

  3. 《利用Python进行数据分析》笔记---第5章pandas入门

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  4. 《利用Python进行数据分析》笔记---第4章NumPy基础:数组和矢量计算

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  5. 《利用Python进行数据分析》笔记---第2章--1880-2010年间全美婴儿姓名

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  6. 《利用Python进行数据分析》笔记---第2章--MovieLens 1M数据集

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  7. 《利用Python进行数据分析》笔记---第2章--来自bit.ly的1.usa.gov数据

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  8. Knockout应用开发指南 第六章:加载或保存JSON数据

    原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...

  9. 第六章:加载或保存JSON数据

    加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多 ...

随机推荐

  1. JSON和数据集互相转换单元

    如题......只是一个单元, 为了测试JSON单元性能的... 具体测试结果参考: http://www.cnblogs.com/hs-kill/p/3668052.html 代码中用到的Seven ...

  2. 老司机带你走进Core Animation

    为什么时隔这么久我又回来了呢? 回来圈粉. 开玩笑的,前段时间ipv6被拒啊,超级悲剧的,前后弄了好久,然后需求啊什么的又超多,所以写好的东西也没有时间整理.不过既然我现在回来了,那么这将是一个井喷的 ...

  3. PowerDesigner中表名过长,自动生成的主键名截取的问题

    在PowerDesinger中,若表名过长,自动生成的主键名会被自动截取. 解决如下:DataBase/Edit Current DBMS/Scripts/Objects/PKey/ConstName ...

  4. Python 2.7 - CentOS 7 - ImportError: No module named Tkinter

    It's simple. sudo yum -y install tkinter Just want to say, "I'm back".

  5. (js) 输入框只能输入中文、英文、数字、@符号和.符号

    只能输入中文.英文.数字.@符号和.符号<input type="text" onkeyup="value=value.replace(/[^\a-\z\A-\Z0 ...

  6. android中如何在低版本(5.0之前)上使用tint(着色)属性

    1. 使用app前缀(app:backgroundTint,app:backgroundTintMode),如果使用android前缀,在低版本上是拿不到值的,因为这些属性是5.0以后才加入的. 2. ...

  7. 自动重启sqlserver服务

    公司一台官网服务器是由.net语言sqlserver数据库开发的,官网后台登录要涉及到sql数据库,现在出了一个问题,每天登录后台都会报错,要重启sqlserver才能进入,问题一直也没有解决,但是也 ...

  8. css初始化样式代码

    为什么要初始化CSS? CSS初始化是指重设浏览器的样式.不同的浏览器默认的样式可能不尽相同,所以开发时的第一件事可能就是如何把它们统一.如果没对CSS初始化往往会出现浏览器之间的页面差异.每次新开发 ...

  9. kafka Failed to send messages after 3 tries 问题解决

    kafka Failed to send messages after 3 tries. 在kafka0.8开发过程中 生产者测试用例碰到了 Exception in thread "mai ...

  10. ndt histogram_direction

    histogram_direction N_FLAT_BINS=40; dlong = pi*(3-sqrt(5.0)); % ~2.39996323 dz = 2.0/N_FLAT_BINS; lo ...