6.1.5 XML 和 HTML :网络抓取
pandas内建的 read_html 可以使用 lxml 和 bs4 等库将HTML 中的表自动解析成 dataframe 对象。
tables=pd.read_html('eeee.html') # 银行倒闭数据的HTML 文件。。。
failures=tables[0] # 默认情况下,read_html 会搜索并尝试解析所有包含在 <table > 标签种的表格数据
failures.head() # 返回的结果 ( tables )是 datasframe 对象的列表
Bank Name City ST CERT Acquiring Institution Closing Date Updated Date
0 Allied Bank Mulberry AR 91 Today's Bank September 23, 2016 November 17, 2016
1 The Woodbury Banking Company Woodbury GA 11297 United Bank August 19, 2016 November 17, 2016
2 First CornerStone Bank King of Prussia PA 35312 First-Citizens Bank & Trust Company May 6, 2016 September 6, 2016
3 Trust Company Bank Memphis TN 9956 The Bank of Fayette County April 29, 2016 September 6, 2016
4 North Milwaukee State Bank Milwaukee WI 20364 First-Citizens Bank & Trust Company March 11, 2016 June 16, 2016
pd.to_datetime(failures['Closing Date']).dt.year.value_counts()
2010 157
2009 140
2011 92 # 根据结果就可以进行一些数据清理和分析工作,比如计算每年倒闭的数量
2012 51
2008 25
/.................
6.2 二进制格式
使用 python 内建的 pickle 序列化模块进行二进制格式操作是存储数据(也成为序列化)最高效,最方便的方式之一。
pandas有 to_pickle 方法可以将数据以 pickle 写入硬盘:
frame=pd.read_csv('ex2.csv')
frame
a b c d message
0 1 2.0 3 4 hello
1 5 6.0 7 8 world
2 8 10.0 11 12 foo
3 13 NaN 15 16 NaN
frame.to_pickle('frame_pickle') # 以pickle 格式写入
# 然后你可以使用 pickle 模块下的 load 读取数据,或使用 pandas.read_pickle
pd.read_pickle('frame_pickle') # 我记得 pickle 文件的后缀就写 pickle 来着。。。
6.2.1 使用 HDF5 格式
HDF5 是一个备受好评的文件格式,用于存储大量的科学数组数据。他以 C 库的形式提供,并且有许多其他语言的接口。HDF 代表分层数据格式。每个 HDF5 文件可以存储多个数据集并且支持元数据。
HDF5支持多种压缩模式的即时压缩,使得重复模式的数据可以更高效的存储,HDF5适用于处理不合适再内存种存储的超大型数据,可以是你高效的读写大型数组的一块。
frame=pd.DataFrame({'a':np.random.randn(100)})
store=pd.HDFStore('mydata.h5')
store['obj1']=frame
store['obj2']=frame['a'] # 可以存储多个数据集,dataframe series 都可以
store
<class 'pandas.io.pytables.HDFStore'>
File path: mydata.h5
store['obj1']
a
0 0.061638
1 -1.411026
2 1.223337
3 1.019974
4 0.030391
... ...
95 -0.416437
96 -0.223872
97 -1.040002
98 -0.060678
99 0.286993
100 rows × 1 columns
HDFStore 支持两种存储模式,‘fixed’ and ‘table’ 。后者速度更慢,但是支持一种特殊语法的查询
store.put('obj3',frame,format='table') # store['obj3']=frame 的显示版本,但是我们可以设置其他选项,如存储格式
store.select('obj3',where=['index == 10'])
a
10 -0.057515
store.close()
frame.to_hdf('mydata.h5','obj3',format='table') # read_hdf 函数是这些工具的快捷方法。
pd.read_hdf('mydata.h5','obj3',where=['index<5'])
6.2.2 读取 Microsoft Excel 文件
pandas 也支持通过ExedlFile 类或 pandas.read_excel 函数来读取存储在Excel 文件中的表格型数据。这些工具内部使用 xlrd 和 openpyxl 来分别读取 XLS XLSX 文件。
xlsx=pd.ExcelFile('e.xlsx')
pd.read_excel(xlsx,'Sheet1') # 如果你读取的是多个表的文件,生成 ExcelFile更快
a b c d message # 也可以 read_excel('e.xlsx','Sheet1')
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
writer=pd.ExcelWriter('e2.xlsx') # 将数据写入 表格中
frame.to_excel(writer,'Sheet1')
writer.save()
# 也可以
frame.to_excal('e3.xlsx')
6.3 与Web API 交互
很多网站都有公开API ,通过JSON 或其他格式提供数据服务,,,就是 requests 爬虫啦。。。
import requests
url = 'https://api.github.com/repos/pandas-dev/pandas/issues'
resp = requests.get(url)
data=resp.json()
issues=pd.DataFrame(data,columns=['number','title','labels','state'])
issues
number title labels state
0 34626 BUG: s3 reads from public buckets not working [{'id': 76811, 'node_id': 'MDU6TGFiZWw3NjgxMQ=... open
1 34625 REF: re-use existing conversion functions [] open
2 34623 TST/REF: arithmetic tests for BooleanArray + c... [{'id': 76811, 'node_id': 'MDU6TGFiZWw3NjgxMQ=... open
3 34622 added a test for issue #20627 [] open
4 34621 BUG: Nanoseconds are set to 0 when converting ... [{'id': 76811, 'node_id': 'MDU6TGFiZWw3NjgxMQ=... open
.........................好久没捣鼓爬虫了,,,,,感觉没什么好项目啊。。。
6.4 与数据库交互
从 SQL 中将数据读取为 DataFrame 是相当简单直接的,pandas 有多个函数可以简化这个过程。
其实就是对数据库的操作。。。可以看看python对MySQL的操作啊
import pymysql
db = pymysql.connect(host="localhost",port=3306,user="root",password="54567789",database='jd')
cursor=db.cursor()
cursor.execute('select * from 笔记本')
result=cursor.fetchmany(10)
db.close()
pd.DataFrame(result)
0 1 2 3 4 5 6 7 8
0 99 100004915731 联想ThinkPad 翼490(E490 25CD)英特尔酷睿i5 14英寸轻薄 电脑(i5... ThinkPad京东自营旗舰店 4499.00 //item.jd.com/100004915731.html 1593 1004 70115
1 100 100004311524 联想ThinkPad X390(39CD)英特尔酷睿i5 13.3英寸轻薄 电脑(i5-82... ThinkPad京东自营旗舰店 6399.00 //item.jd.com/100004311524.html 218 103 4838
2 101 100006842477 华硕(ASUS) 顽石六代S 英特尔酷睿i5 15.6英寸轻薄 电脑(十代i5-1035G1... 华硕京东自营官方旗舰店 4169.00 //item.jd.com/100006842477.html
呵呵,我的爬虫爬下来的数据终于有用了。。。。。。。