第四节 数据加载、存储

本章节以及后续章节的源码,当然也可以从我的github下载,在源码中我自己加了一些中文注释。

经过前面文章对NumPy和Pandas库的学习,相信大家已经能掌握基本的数据处理操作,更高级的数据处理操作将在本节之后介绍,像什么数据的清洗、转换、合并、重塑、聚合、分组、可视化等都会介绍给大家。

俗话说,巧妇难为无米之炊,没有数据源,就没法进行数据处理,本节就是讲数据的加载和存储。

进入正题:

输入输出通常可以划分几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源

一、读写文本格式的数据

pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,下表对它们进行了总结,其中read_csv和read_table是今后用的最多的:

read_csv和read_table函数的参数:

1、基本操作

有些表格可能不是用固定的分隔符去分隔字段,可以用正则表达式来作为read_table的分隔符:

对于文件中出现的缺失值处理:默认情况下,pandas会用一组经常出现的标记值进行识别,如NA,-1.#IND、NULL等

2、逐块读取文本文件

在看大文件之前,我们先设置pandas显示地更紧些:

pd.options.display.max_rows = 10

要逐块读取文件需要设置chunksize(行数)

read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代。比如说,我们可以迭代处理ex6.csv,将值计数聚合到"key"列中,如下所示:

3、将数据写到文本格式

用to_csv方法,可以将数据写到一个以逗号分隔的文件中:

写入成功:


写入成功

4、手工处理分隔符文件

大部分存储在磁盘上的表格型数据都能用pandas.read_table进行加载,然而有时还是需要做一些手工处理。例如下面文件:

CSV文件的形式有很多种,只需定义csv.Dialect的一个子类即可定义出新格式(如专门的分隔符,字符串引用约定、行结束符等):

例如:

对于那些使用复杂分隔符或多字符的文件,csv模块无能为力,可以使用字符串的split方法或正则表达式方法re.split进行拆分和其他整理工作。


要手工输出分隔符文件,可以使用csv.writer。它接受一个已打开且可写的文件对象。

5、加载json数据

JSON已经成为通过HTTP请求在Web浏览器和其他应用程序之间发送数据的标准格式之一。

pandas.read_json可以自动将特别格式的JSON数据集转换为Series或DataFrame。如果你需要将数据从pandas输出到JSON,可以使用to_json方法

6、XML和HTML:Web信息收集

Python有许多可以读写常见的HTML和XML格式数据的库,包括lxml、Beautiful Soup和html5lib。lxml的速度比较快,但其它的库处理有误的HTML或XML文件更好。

pandas有一个内置的功能,read_html,它可以使用lxml和Beautiful Soup自动将HTML文件中的表格解析为DataFrame对象。pandas.read_html有一些选项,默认条件下,它会搜索、尝试解析标签内的的表格数据。结果是一个列表的DataFrame对象:

我们可以做一些数据清洗和分析,比如计算按年份计算倒闭的银行数:

7、利用lxml.objectify解析XML

XML(Extensible Markup Language)是另一种常见的支持分层、嵌套数据以及元数据的结构化数据格式。

纽约大都会运输署发布了一些有关其公交和列车服务的数据资料(http://www.mta.info/developers/download.html)。这里,我们将看看包含在一组XML文件中的运行情况数据。每项列车或公交服务都有各自的文件(如Metro-North Railroad的文件是Performance_MNR.xml),其中每条XML记录就是一条月度数据,如下所示:

我们先用lxml.objectify解析该文件,然后通过getroot得到该XML文件的根节点的引用:

XML数据可以比本例复杂得多。每个标记都可以有元数据。看看下面这个HTML的链接标签(它也算是一段有效的XML):

二、二进制数据格式

1、pickle

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

可以通过pickle直接读取被pickle化的数据,或是使用更为方便的pandas.read_pickle

pickle仅建议用于短期存储格式。

2、HDF5格式

pandas内置支持两个二进制数据格式:HDF5和MessagePack。HDF5是一个流行的工业级库,它是一个C库,带有许多语言的接口。HDF5中HDF指的是层次型数据格式。每个HDF5文件都含有一个文件系统式的节点结构,它使你能够存储多个数据集并支持元数据。与其他简单格式相比,HDF5支持多种压缩器的即时压缩,还能更高效地存储重复模式数据。对于那些非常大的无法直接放人内存的数据集,HDF5就是不错的选择,因为它可以高效地分块读写。

Python中的HDF5库有两个接口(即PyTables和h5py),他们各自采取了不同的问题解决方式。h5py提供了一种直接而高级的HDF5 API访问接口,而PyTables则抽象了HDF5的许多细节以提供多种灵活的数据容器、表索引、查询功能以及对核外计算技术的某些支持。

Pandas有一个最小化的类似于字典的HDFStore类,它通过PyTables存储pandas对象:

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

put是store['obj2'] = frame方法的显示版本,允许我们设置其它的选项,比如格式。

pandas.read_hdf函数可以快捷使用这些工具:


如果要处理的数据位于远程服务器,比如Amazon S3或HDFS,使用专门为分布式存储(比如Apache Parquet)的二进制格式也许更加合适。Python的Parquet和其它存储格式还在不断的发展之中

如果需要处理本地海量数据,建议好好研究PyTables和h5py。由于许多数据分析问题都是IO密集型(而不是CPU密集型),利用HDF5这样的工具能显著提升应用程序的效率。

3、读取Microsoft Excel文件

pandas的ExcelFile类或pandas.read_excel函数支持读取存储在Excel 2003(或更高版本)中的表格型数据。

要使用ExcelFile,通过传递xls或xlsx路径创建一个实例。如果要读取一个文件中的多个表单,创建ExcelFile会更快,但你也可以将文件名传递到pandas.read_excel。

如果要将pandas数据写入为Excel格式,你必须首先创建一个ExcelWriter,然后使用pandas对象的to_excel方法将数据写入到其中。还可以不使用ExcelWriter,而是传递文件的路径到to_excel。

三、使用Web API加载数据

这个其实是爬虫的相关内容,大家自行学习爬虫的相关库,如requests库,BeautifulSoup库,urllib库,selenium库,Scrapy爬虫框架等。

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

爬虫用来获取很多数据。相关知识点很多,可以分出一个专业领域。对爬虫感兴趣的可以去专门学习。


搜索最新的30个GitHub上的pandas主题,响应对象的json方法会返回一个包含被解析过的JSON字典,加载到一个Python对象中:

data中的每个元素都是一个包含所有GitHub主题页数据(不包含评论)的字典。我们可以直接传递数据到DataFrame,并提取感兴趣的字段:

四、使用数据库加载数据

在许多应用中,数据库很少取自文本文件,因为这种方式存储大量数据很低效。基于SQL的关系型数据库使用非常广泛,此外还有一些非SQL(即noSQL)型数据库也变得非常流行。


这种数据规整操作相当多,你肯定不想每查一次数据库就重写一次。SQLAlchemy项目是一个流行的Python SQL工具,它抽象出了SQL数据库中的许多常见差异。pandas有一个read_sql函数,可以让你轻松的从SQLAlchemy连接读取数据。这里,我们用SQLAlchemy连接SQLite数据库,并从之前创建的表读取数据:

使用数据库加载数据涉及到了数据库的相关知识,数据库也是一门分支,需要系统了解其原理以及设计,正确使用。

快速学习:

第一节 NumPy基础(一)

第二节 NumPy基础(二)

第三节 Pandas入门基础

第四节 数据加载、存储

第五节 数据清洗

第六节 数据合并、重塑

第七节 数据聚合与分组运算

第八节 数据可视化

第九节 pandas高级应用

第十节 时间序列

第十一节 Python建模库

数据分析案例--1880-2010年间全美婴儿姓名的处理

数据分析案例--MovieLens 1M数据集

数据分析案例--USA.gov数据

数据分析案例--2012联邦选举委员会数据库

数据分析案例--USDA食品数据库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • ◆◆◆ 李笑来在他的《把时间当做朋友》里说,当你对未来充满迷惑的时候,不要着急,因为你并不孤独,对未来充满迷惑并不...
    漂流瓶的时光阅读 1,121评论 0 0
  • 第三部分:护士职业生涯的设计 01 N0-N4的层级进阶模式 面对这样一个庞大的团队和其迅猛的发展趋势,生涯规划技...
    燕尾无声阅读 2,280评论 1 10
  • 夏天可真冷 冻得我直冒汗 想去冬天晒太阳 可惜隔着秋天 海水可真甜 融了一大块盐 如果在海里下一把面 就变成一大锅...
    种麦子阅读 378评论 1 1
  • 早上打开微信,看到刘莉对官官的表达很生气,之后官官出现后,双方的语言表达更加尖锐,互相攻击对方的脆弱。 看到他们的...
    上善若水泽万物阅读 136评论 1 5