笔记|数据分析之pandas基础----数据文件加载与存储(二)

pandas-read-file

读取Microsoft Excel文件

Excel作为最典型的表格型数据,我们需要用到ExcelFile对象,首先需要下载安装xlrdopenpyxl

In [11]: xls_file = pd.ExcelFile('ex1.xlsx')

In [12]: table = xls_file.parse('Sheet1')

In [13]: table
Out[13]:
   Unnamed: 0  a   b   c   d message
0           0  1   2   3   4   hello
1           1  5   6   7   8   world
2           2  9  10  11  12     foo

用requests与Web API做交互

Python中最常用也是最方便的访问API的库requests
requests官方文档

 In [19]: url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'

In [20]: resp = requests.get(url)

In [21]: resp
Out[21]: <Response [200]>

In [30]: data = resp.json()

In [32]: frame = DataFrame(data)

In [33]: frame
Out[33]:
    total_count  incomplete_results                                              items
0       3747517               False  {'id': 21289110, 'node_id': 'MDEwOlJlcG9zaXRvc...
1       3747517               False  {'id': 83222441, 'node_id': 'MDEwOlJlcG9zaXRvc...
2       3747517               False  {'id': 54346799, 'node_id': 'MDEwOlJlcG9zaXRvc...
3       3747517               False  {'id': 51117837, 'node_id': 'MDEwOlJlcG9zaXRvc...
4       3747517               False  {'id': 1039520, 'node_id': 'MDEwOlJlcG9zaXRvcn...
5       3747517               False  {'id': 596892, 'node_id': 'MDEwOlJlcG9zaXRvcnk...
6       3747517               False  {'id': 33614304, 'node_id': 'MDEwOlJlcG9zaXRvc...
7       3747517               False  {'id': 4164482, 'node_id': 'MDEwOlJlcG9zaXRvcn...
8       3747517               False  {'id': 3544424, 'node_id': 'MDEwOlJlcG9zaXRvcn...
9       3747517               False  {'id': 33015583, 'node_id': 'MDEwOlJlcG9zaXRvc...
10      3747517               False  {'id': 21872392, 'node_id': 'MDEwOlJlcG9zaXRvc...
11      3747517               False  {'id': 1362490, 'node_id': 'MDEwOlJlcG9zaXRvcn...
12      3747517               False  {'id': 3638964, 'node_id': 'MDEwOlJlcG9zaXRvcn...
13      3747517               False  {'id': 843222, 'node_id': 'MDEwOlJlcG9zaXRvcnk...
14      3747517               False  {'id': 529502, 'node_id': 'MDEwOlJlcG9zaXRvcnk...
15      3747517               False  {'id': 63476337, 'node_id': 'MDEwOlJlcG9zaXRvc...
16      3747517               False  {'id': 40416236, 'node_id': 'MDEwOlJlcG9zaXRvc...
17      3747517               False  {'id': 4086616, 'node_id': 'MDEwOlJlcG9zaXRvcn...
18      3747517               False  {'id': 29290473, 'node_id': 'MDEwOlJlcG9zaXRvc...
19      3747517               False  {'id': 26516210, 'node_id': 'MDEwOlJlcG9zaXRvc...
20      3747517               False  {'id': 5483330, 'node_id': 'MDEwOlJlcG9zaXRvcn...
21      3747517               False  {'id': 81598961, 'node_id': 'MDEwOlJlcG9zaXRvc...
22      3747517               False  {'id': 83844720, 'node_id': 'MDEwOlJlcG9zaXRvc...
23      3747517               False  {'id': 12888993, 'node_id': 'MDEwOlJlcG9zaXRvc...
24      3747517               False  {'id': 136328388, 'node_id': 'MDEwOlJlcG9zaXRv...
25      3747517               False  {'id': 70905478, 'node_id': 'MDEwOlJlcG9zaXRvc...
26      3747517               False  {'id': 139824423, 'node_id': 'MDEwOlJlcG9zaXRv...
27      3747517               False  {'id': 41058054, 'node_id': 'MDEwOlJlcG9zaXRvc...
28      3747517               False  {'id': 15019962, 'node_id': 'MDEwOlJlcG9zaXRvc...
29      3747517               False  {'id': 873328, 'node_id': 'MDEwOlJlcG9zaXRvcnk...

使用数据库

在存储大量数据的情况中,使用SQL数据库无疑是个最佳的选择。
通过sqlite3创建一个数据库

In [34]: import sqlite3

In [35]: query = """
    ...: CREATE TABLE test
    ...: (a VARCHAR(20), b VARCHAR(20),
    ...: c REAL, d INTERGER);"""

In [36]: con = sqlite3.connect('testdata.sqlite')

In [37]: con.execute(query)
Out[37]: <sqlite3.Cursor at 0x12042d490>

In [38]: con.commit()

然后插入几行数据

In [40]: data = [('Atlanta', 'Georgia', 1.25, 6),('Tallahassee','Florida',2.6, 3),('Sacramento','Cali
    ...: fornia',1.7, 5)]

In [41]: stmt = "INSERT INTO test VALUES(?,?,?,?)"

In [42]: con.executemany(stmt, data)
Out[42]: <sqlite3.Cursor at 0x12042d960>

In [43]: con.commit()

接下来从数据库中选取数据,大部分Python SQL驱动器都会返回一个元组列表:

In [44]: cursor = con.execute('select *from test')

In [45]: rows = cursor.fetchall()

In [46]: rows
Out[46]:
[('Atlanta', 'Georgia', 1.25, 6),
 ('Tallahassee', 'Florida', 2.6, 3),
 ('Sacramento', 'California', 1.7, 5)]

将这个元组传给DataFrame,还需要列名(在description属性中)

In [47]: cursor.description
Out[47]:
(('a', None, None, None, None, None, None),
 ('b', None, None, None, None, None, None),
 ('c', None, None, None, None, None, None),
 ('d', None, None, None, None, None, None))

In [53]: frame = DataFrame(rows, columns=[x[0] for x in cursor.description])

In [54]: frame
Out[54]:
             a           b     c  d
0      Atlanta     Georgia  1.25  6
1  Tallahassee     Florida  2.60  3
2   Sacramento  California  1.70  5

**操作步骤略显繁琐,其实SQLALchemy项目可以解决这个问题(安装之)。pandas中的read_sql函数可以结合它一起使用。

In [61]: db = sqla.create_engine('sqlite:///testdata.sqlite')

In [62]: pd.read_sql('select * from test',db)
Out[62]:
            a            b      c  d
0      Atlanta      Gerogia  1.25  6
1  Tallahassee      Florida  2.60  3
2   Sacramento   California  1.70  5

总结:

本章中学习了如何加载与存储常用的文件格式,在Python中不同的文件格式需要用到不同的包,有些需要配合Python自带的函数一起使用。

处理Html文件 需要pandas结合beautifulsoup可很方便的读取html文件并转换成DataFrame格式
处理XML文件 需要用到lxml库中的objectify对象,通过objectify.parse函数直接解析,解析后可直接获取xml的根节点root
利用StringIO也可以解析字符串形式的html
处理Excel文件 配合xlrdopenpyxl包,ExcelFile对象也可以直接解析Excel文件并转成DataFrame
与WebAPI交互 requests包完美解决了Python与WebAPI交互的问题,使用方便效率高。
使用数据库 Python的sqlite3包含了数据库操作的基本功能,缺点是操作繁琐。而比较流行的项目SQLALchemy则非常适合作为Python的数据库操作工具。

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

推荐阅读更多精彩内容