目录
一、读写文本格式的数据
(一)读取文本数据
函数 | 说明 |
---|---|
read_csv | 从文件、URL、文件型对象中加载带分隔符的数据,默认分割符为逗号 (常用) |
read_table | 从文件、URL、文件型对象中加载带分隔符的数据,默认分割符为制表符‘\t’ (常用) |
read_fwf | 读取定宽列格式数据,没有分隔符 |
read_clipboard | 读取剪贴板上的数据,可以看做read_table的剪贴板,在网页转换为表格时十分有用 |
type test.csv # 将文本内容原始内容打印
# 文本文件内容没有标题行的情况下
pd.read_csv('test1.csv', header=None) # Pandas可为其分配默认列名
pd.read_csv('test1.csv', names=['a','b','c','d']) # 没有标题行的情况下,也可以自定义列名
# 可以通过index_col参数指定列作为DataFrame的索引
pd.read_csv('test2.csv', names=['a','b','c','d'],index_col='d')
# 可以通过为index_col参数传递由列编号或列名组成的列表作为DataFrame的一个层次化索引
test1 = pd.read_csv('test2.csv', names=['a','b','c','d'],index_col=['c', 'd'])
# 分隔符步规则时,可利用正则表达式自定义分隔符
pd.read_table('test3.txt',sep='\s+')
# skiprows参数可跳过指定行,读入其他行数据
pd.read_csv('test4.csv',skiprows=[1,3,5])
# pandas常用一组经常出现的标记值进行识别缺失值,如NA、-1.#IND、NULL等,可以用isnull()方法查看
result = pd.read_csv('test5.csv')
pd.isnull(result) # 其输出为False和True组成的数组
# na_values参数可以接受一组用于表示缺失值的字符串
pd.read_csv('test5.csv', na_values=['NULL'])
# 可以为na_values传入一个字典为各列指定不同的NA标记值
pd.read_csv('test5.csv', na_values={'a':['tom','jack'],'b':['13']})
(二)写入数据至文本文件
to_csv('test.csv') # 写入CSV文件
from_csv('test.csv', parse_dates=True) # 作用同上,效果类似
(三)JSON数据
JSON(javaScript Object Notation)
obj = """
{"name" : "Wes",
"places_lived": ["United States","Spain","Germany"],
"pet": null,
"siblings": [{"name":"Scott","age":25,"pet":"Zuko"},
{"name": "Katie","age": 33,"pet": "Cisco"}]
}
"""
# 导入json数据模块
import json
# 将json字符串转换为Python形式
result = json.loads(obj)
# 将Python对象转换为JSON形式
asjson = json.dumps(result)
# 将一组JSON对象转换为DataFrame,向DataFrame构造器传入一组JSON对象,并选取数据字段的子集
silbings = DataFrame(result['siblings'],columns=['name','age'])
二、二进制数据格式
使用Python内置的pickle序列化
frame = pd.read_csv('test1.csv')
frame.save('frame_pickle')
将pickle数据读回到Python
pd.load('frame_pickle')
(一)使用HDF5格式
可以实现高效读写磁盘上以二进制格式存储的科学数据,HDF5更适合一次写入多次读取的操作,同时写入可能会出现错误
# Pandas的HDFStore类通过PyTables存储pandas对象
store = pd.HDFStore('data.h5')
# 读取HDF5文件的对象可以像读取字典一样进行获取
store['obj1']
(二)读取Excel文件
需要先安装xlrd和openpyxl包
# 创建一个ExcelFile实例
xls_file =pd.ExcelFile('data.xls')或者xls_file =pd.ExcelFile('data.xlsx')
# 读取工作表
table = xls_file.parse('Sheet1')
三、使用HTML和Web API
该节与爬虫学习相关,主要为向网页请求并爬取相应数据
四、使用数据库
(一)SQL
内置驱动器sqlite3
import sqlite3
query = """
CREATE TABLE test
(
a VARCHAR(20),
b VARCHAR(20),
c REAL,
d INTEGER
);
"""
con = sqlite3.connect(':memory:') # 连接SQL数据库
con.execute(query) # 执行语句
con.commit() # 提交 确定完成
插入几行数据
data= [('Atlanta','GEorgia',1.25,6),
('Tallahassee','Florida',2.6,3),
('Sacramento','California',1.7,5)]
stmt = "INSERT INTO test VALUES(?,?,?,?)"
# stmt sql模板字符串
# data 模板字符串的参数,是一个列表,列表的每一个元素必须是元组!!!
con.executemany(stmt,data) # 批量执行语句
concommit() # 提交 确定完成
读取数据,大部分Python SQL驱动器(PyODBC、psycopg2、MySQLdb、pymssql等)会返回一个元组列表
cursor = con.execute('select * from test')
rows = cursor.fetchasll()
传递元组列表给DataFrame的构造器,需获取器列名(元组列表的description属性)
DataFrame(rows, columns=zip(*cursor.description)[0])
# 简化版,操作简单
import pandas.io.sql as sql
sql.read_frame('select * from test', con)
(二)NoSQL(例:MongoDB)
用pymongo(MongoDB的驱动器)通过默认端口进行连接
import pymongo
con = pymongo.Connection('localhost',port=27017)