0.
着重要看的是pandas的数据的输入和输出
io分为几个大类
读取文本文件或者其他更高效的磁盘储存
加载数据库中的数据
用web api操作网络资源
这些函数将文本数据转换为df 有这么几个选项
索引:将一个或者多个列当做返回的df处理 以及是否从文件、用户获取列名
类型推断和数据转换:包括用户定义值的转换 和自定义的缺失值标记列表等
日期解析:将分散在多个列中的日期时间信息组合成结果中的单个列(这个是不是类似excel的date函数。。)
迭代:可以对大文件进行逐块迭代
不规整数据:跳过一些行,页脚,注释,或者其他一些不重要的东西
0.5.
插一些cmd的事
除了在想进的界面用shift+右键
就是用cd 路径\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\右斜杠
cd\ 返回上一级
cd.. 返回主盘
cd 路径\文件.后缀 执行文件
type 路径\文件.后缀 打开文件
dir 看文件夹下有什么文件
1.
df=pd.read_csv('路径/文件.后缀名')
打开并定义df
df=pd.read_table('路径/文件.后缀名',sep=',')
这个是指定了分隔符是 逗号‘,’
pd.read_csv(‘路径/文件.后缀名',header=None)
这个指定没有表头,第一行就是表格中的内容 不是作为表头了
pd.read_csv(‘路径/文件.后缀名',names=['a','b','c'],index_col='c')
同样 这个就是把adc作为表头了 同时c作为了索引的表头
pd.read_table(文件,sep='\s+') 这个是正则表达式 表示的是任意个空白符
pd.read_table(文件,skiprows=[0,1,3])
pd.isnull(df) 就会显示出来 df里有值得是T 没有的是F
2.
逐块读取文本文件: 假如有100行 那就10行10行的看
pd.optoins.display.max_rows=10 最多就显示10行 中间的是省略号
pd.read_table(文件,nrows=5) 就读取前五行
shipfooter=5 从文件末尾忽略的行数
skiprows=5 从文件开头忽略的行数
这些都不包括表头
可以指定行数: chunksize
chunker=pd.read_table(文件,chunksize=5) 这个chunker是一个迭代器
然后就可以
t=pd.Series([ ])
for piece in chunker:
t=t.add(piece['key'].calue_counts(),fill_value())
t=t.sort_values(ascending=False)
也可以用get_chunk方法 可以读取任意大小的块
3.
数据可以被输出为分隔符格式的文本
df=pd.read_csv(‘路径/文件.后缀名')
df.to_csv(‘路径/文件.后缀名',sep='|') 这就用|分隔了
df.to_csv(‘路径/文件.后缀名',na_rep('空字符表示的内容'))
同上,括号里边可以是index=False 不加索引
header=None 不加表头
以上是df的 Series也有个to_csv的方法
只有两列
4.
import csv
reader是进行迭代 将为每行产生一个元组 并移除所有引号
现在是要将这些个数据整理:
这个是 13行 把文件读取到了一个多行的列表中
14行把表头和数据分离
15行用字典构造式和zip(*values) 创造数据列的字典 h就一个 v指不定几个
这是h:v 然后循环 hv in zip(解包元组 以及 里边要解包values)
这是相关的参数
但这个只能是简单的分隔符才能这样
如果是复杂分隔符或者多字符的分隔符 只能用字符串的split方法或者正则去处理了
如果要手工输出分隔符文件 就要使用csv.write
他接受一个已经打开的且可写的文件对象已经跟reader相同的格式化选项
4.
JSON数据成为通过HTTP请求在web浏览器和其他应用程序之间发送数据的标准格式之一了
他比表格型文本格式csv要灵活
这里就先简单的记得有这么个事就行了 后续章节还会再说这个
import json
obj是一个字典
result=json.loads(obj)
asjson=json.dumps(result) 他将一个python对象转换成json格式
df=pd.DataFrame(result['要取的列'],column=['表头']) 将一个json对象传入df构造器 然后就可以了
data=pd.read_json(文件) 把默认选项即假设json数组中的每个对象都是表格中的一行
to_json方法,将数据从pandas输出到json
5.
XML和HTML这两个提供web信息的数据的库,包括lxml,beautifulsoup,html5lib
lxml是一个库 bs4 html5lib也是 都可以pip安装
pandas内置的read_html 可以使lxml和bs自动将html文件中的表格变为df对象
他把<table>标签内的表格数据给解析了
后续章节还有清洗的内容
lxml.objectify import起来
path要设定一个xml的路径
parse=objectify.parse(open(path))
root=parse.getroot()
root.INDICATOR 翻译是 指示器 这个返回一个用于生产各个
<INDICATOR>XML元素的生成器
对于每条记录 可以用标记名称和数据值 填充出一个字典
然后这个字典转换为一个df
6.
二进制数据格式 python内置pickle序列化
pd对象的 to_pickle方法 可以把pd对象的数据以pickle格式保存到磁盘上
df=pd.read_csv('文件') 定义df
df.to_pickle('保存pickle文件路径') 保存为pickle文件
pd.read_pickle:('文件')
pd内置支持两个数据格式:HDF5 MessagePack
pd或者np 数据有其他的储存格式:
bcolz:一种可压缩的列存储二进制格式 基于Blosc压缩裤
Feather:列存储文件格式
7.
HDF5 hdf是指层次性数据格式 HDF5是一种存储大规模科学数组数据的文件格式
每个HDF5都含有一个文件系统式的节点结构
可以分块高效读写
pandas提供了高级的接口 可以简化储存Series和df对象
HDFStore类像字典 可以处理低级的细节
df=pd.DataFrame({ })
store=pd.HDFStore('data.h5')
store['obj1']=df
store[‘obj1_col’]=df['a']
就可以输出store了
HDFStore支持的存储模式 fixed table
store.put('obj',df,format='table')
store.select('obj',where=['index>10'])
table是支持特殊语法进行查询操作的
put是store['obj']=df方法的现实版本 允许我们设置其他选项
pd.read_hdf函数:df.to_hdf('h5文件',‘obj’,format='表头')
pd.read_hdf('h5文件',‘obj’,where=[条件])
以上都是处理少量数据
如果处理本地海量数据 可以用PyTables和h5py
数据分析问题大多是IO密集型,不是CPU密集型 所以用HDF5这样的工具能显著提升应用程序的效率
HDF5不是数据库 他是适合一次写多次读的数据集
8.
终于到Excel了
要安装xlrd读取XLS
安装openpyxl读取XLSX
pd的ExcelFile类或者pd.read_excel函数,配合上述两个工具 才可以读excel
如果要读取一个文件中的多个sheet 创建ExcelFile更快,但也可以不传递
如果要将pandas数据写入为excel 要先创建一个ExcelWriter 然后使用pd对象的to_excel方法写入
也可以不用ExcelWriter,直接传递文件路径到to_excel
9.
WebAPI交互
现在许多网站都通过json或其他格式提供数据的公共api
可以通过request包
import request
url=‘网址’
resp=request.get(url)
data=resp.json()
data[0]['title']
issues=pd.DataFrame(data,columns=['number','label'])
这样就可以创建常见的web api接口 返回df对象
10.
数据库
import sqlite3
import数据库
query=‘’‘
CREATE TABLE test
( a VARCHAR(20),b VARCHAR(20),
c REAL, d INTEGER
)’‘’
建一个叫query的表
con=sqlite3.connect('mydata.sqlite')
con是一个连接
con.execute(query)
con执行query
con.commit()
指派con
data=[{(插入几个元组)
(里边都是四个元素)
}]
做一个data
stmt=‘ INSERT INTO test VALUES(?,?,?,?)’
stmt是一个插入内容的语句
con.executemany(stmt,data)
把内容插入了
从表中选取数据的时候会返回一个元组列表
cursor=con.execute('select * from test')
光标执行语句
rows=cursor.fetchall()
全部取得
rows
就会返回一个元组组成的列表
pd.DataFrame(rows,columns=[x[0] for x in cursor])
这里边cursor的第0位是abcd 可以用cursor.description描述
pd有一个read_sql函数
import sqlalchemy as sqla
db=sqla.ceate_engine('sqlite:///mydata.sqlite')
创建引擎 指向数据库
pd.read_sql('select * from test', db)
11.
以上是第一步的内容:访问数据