冰冻三尺非一日之寒
读EXCEL-XLRD
Python语言中,读取Excel的扩展工具。
(意为:xls文件read库,只能读。
若写入,要用xlwt,意为:xls文件write写入库。)
可以实现指定表单、指定单元格的读取。
一、安装xlrd模块
到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境。
二、使用介绍
1、导入模块
import xlrd
2、打开Excel文件读取数据
data = xlrd.open_workbook('excelFile.xls')
3、使用技巧
获取一个工作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(0) #通过索引顺序获取
table = data.sheet_by_name(u'Sheet1')#通过名称获取
获取整行和整列的值(数组)
table.row_values(i)
table.col_values(i)
获取行数和列数
nrows = table.nrows
ncols = table.ncols
循环行列表数据
for i in range(nrows ):
print table.row_values(i)
单元格
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value
使用行列索引
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value
简单的写入
row = 0
col = 0
类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 value = ‘单元格的值’
xf = 0 # 扩展的格式化
table.put_cell(row, col, ctype, value, xf)
table.cell(0,0) #单元格的值’
table.cell(0,0).value #单元格的值’
正则表达式替换:
import re
http://www.crifan.com/python_re_sub_detailed_introduction/
排序
对列表使用sort()排序,如何得到对应元素的索引?
比如对a = [3,4,1,7,2]用a.sort()排序得到a = [1,2,3,4,7],如何得到排序后的数组元素的索引(反映位置变化)
在这个例子里应该是[2,4,0,1,3].
1.
>>> a = [3,4,1,7,2]
>>> sorted(enumerate(a), key=lambda x:x[1])
[(2, 1), (4, 2), (0, 3), (1, 4), (3, 7)]
[index for index, value in sorted(enumerate(a), key=lambda x:x[1])]
[2, 4, 0, 1, 3]
-
a = [3,4,1,7,2]
In [2]: enumerate(a)
Out[2]:
In [3]: list(enumerate(a))
Out[3]: [(0, 3), (1, 4), (2, 1), (3, 7), (4, 2)]
In [4]: from operator import itemgetter
In [5]: sorted(enumerate(a), key=itemgetter(1))
Out[5]: [(2, 1), (4, 2), (0, 3), (1, 4), (3, 7)]
In [6]: [index for index, value in sorted(enumerate(a), key=itemgetter(1))]
Out[6]: [2, 4, 0, 1, 3]
和上面匿名函数类似
3.
In [7]: import numpy as np
In [8]: np.argsort([3,4,1,7,2])
Out[8]: array([2, 4, 0, 1, 3])
4.
>>> a = [3, 4, 1, 7, 2]
>>> sorted(xrange(len(a)), key=a.__getitem__)
[2, 4, 0, 1, 3]
DateFrame
pandas是python环境下最有名的数据统计包,而DataFrame翻译为数据框,是一种数据组织方式,这么说你可能无法从感性上认识它,举个例子,你大概用过Excel,而它也是一种数据组织和呈现的方式,简单说就是表格,而在在pandas中用DataFrame组织数据,如果你不print DataFrame,你看不到这些数据.
首先是引入pandas和numpy,这是经常配合使用的两个包,pandas依赖于numpy,引入以后我们可以直接使用np/pd来表示这个两个模块
import numpy as np
import pandas as pd先创建一个时间索引,所谓的索引(index)就是每一行数据的id,可以标识每一行的唯一值.pd.date_range
- 为了快速入门,我们看一下如何创建一个6X4的数据:randn函数用于创建随机数,参数表示行数和列数,dates是上一步创建的索引列.pd.DataFrame(np.random.randn(6,4),index=date,columns=list(‘abcd’))
- 我们还可以使用字典来创建数据框,例如创建一个列名为a的数据框,索引是自动创建的整数 pd.DataFrame({‘a’:np.randn(6),})
- 假如字典内的数据长度不同,以最长的数据为准,比如B列有4行:
- 可以使用obj.dtypes来查看各行的数据格式
- 使用head查看前几行数据(默认是前5行),不过你可以指定前几行obj.head(n)
- 使用tail查看后5行数据obj.tail(5)
- 查看数据框的索引obj.index
- 查看列名用columns查看数据值,用values查看描述性统计,用describe,使用T来转置数据,也就是行列转换,对数据进行排序,用到了sort,参数可以指定根据哪一列数据进行排序。(形式都是obj.func())
- 使用type看一下输出的描述性统计是什么样的数据类型——DataFrame数据(type(df.describe()))
区别del,remove,pop
- del,pop会改变原有对象,remove会生成新对象,不改变原有
- remove参数是值,而del,pop是索引
- 出错信息remove是not in,del和pop是out of range
返回多个函数值
如何写一个返回多个值的函数 ?
函数的return 语句只能返回一个值,可以是任何类型。
因此,我们可以“返回一个 tuple类型,来间接达到返回多个值 ”。
大杀器:官方文档:点这里