在金融数据分析中操作矩阵、列表等数据常用的 Python 包是 Pandas ,但是 Pandas 对于 Excel 表格的操作则不那么容易。
Excel文件是一种二进制文件。Python官方发布版本中没有读写excel文件的模块。需要安装第三方模块来实现对excel文件的读写。较为简单而又常用的第三方库为 xlrd(读取Excel文件)、xlwt(向Excel文件中写入内容)。
建议使用 Anaconda 环境,免去 pip install 安装。我们可以选择手动安装。
pip install xlrd
pip install xlwt
Excel文件读取的操作步骤:
- 导入模块:xlrd
- 打开Excel工作簿:Book
- 指定工作簿中的表单:Sheet
- 根据行列序号读取内容
Excel文件写入的操作步骤:
- 导入模块:xlwt
- 构造工作簿:Workbook
- 为工作簿添加表单:Worksheet
- 根据行列序号写入内容保存文件
以下是读取和写入时主要的方法和属性
Excel读取时主要的方法和属性 | Excel写入时主要的方法和属性 |
---|---|
xlrd.open_workbook(文件名):打开Excel文件 | xlwt.Workbook():创建Excel文件 |
sheet_by_index(索引):根据索引获取表单(Book类) | add_sheet(名称):添加表单(Workbook类) |
sheet_by_name(名称):根据名称获取表单(Book类) | xlwt.XFStyle():定义样式 |
nrows:一共有多少行(Sheet类) | xlwt.Font():定义字体 |
ncols:一共有多少列(Sheet类) | xlwt.Alignment():定义对齐方式 |
cell_value(行序,列序):获取单元格内容(Sheet类) | write(行序,列序,内容,样式):向单元格添加内容(Worksheet类) |
row_values(行序):获取某一行的内容(Sheet类) | write_merge(行序1,行序2,列序1,列序2,内容,样式):合并指定范围单元格,并指定内容 |
……(更多内容查看帮助文档) | ……(更多内容查看帮助文档) |
下面我们用一个例子来理解读取 Excel 表格
def read_excel(file_name): # 读取Excel中的内容
wb = xlrd.open_workbook(filename=file_name) # 打开文件
s = wb.sheet_by_index(0) # 通过索引获取表单,这里获取第一个表单
items = [] # 定义列表保存所有行信息
for i in range(s.nrows): # 循环遍历每一行
item = [] # 创建列表用于保存每一行记录
for j in range(s.ncols): # 循环遍历每一列
item.append(s.cell_value(i, j)) # 添加每个单元格信息
items.append(item) # 添加每行信息
return items
所以我们利用以上定义的函数 read_excel 就能够返回需要读取的表格的所有内容
schools = read_excel("school.xls")
for school in schools:
print(school)
下面我们用一个例子来展示如何写入到 Excel 表格
以下是 school.xls 内容
我们需要将读取的 Excel 文件内容,写入到另一个Excel中,对学校所在省份进行简单判断。第一行合并单元格显示标题。
以下为期望得到的文件。
我们利用以下代码,判断省份并且分别写入到对应文件中。
def write_excel(items, province): # 向Excel中写入内容
wb = xlwt.Workbook(encoding="utf-8")
s = wb.add_sheet(province + "高校信息表", cell_overwrite_ok=True)
style = xlwt.XFStyle() # 定义样式
font = xlwt.Font() # 定义字体
alignment = xlwt.Alignment() # 定义对齐方式
font.bold = True # 加粗
font.height = 300 # 字体大小
font.colour_index = 4 # 颜色
alignment.horz = alignment.HORZ_CENTER # 水平居中
alignment.vert = alignment.VERT_CENTER # 垂直居中
style.font = font # 设置字体
style.alignment = alignment # 设置对齐方式
s.write_merge(0, 0, 0, 6, province + "高校信息表", style)
for j in range(len(items[0])): # 写入表头
print("----")
s.write(1, j, items[0][j])
count = 2
for i in range(1, len(items)):
if items[i][2] == province:
for j in range(len(items[i])):
s.write(count, j, items[i][j])
count = count + 1
wb.save(province + ".xls")
if __name__ == '__main__':
schools = read_excel("school.xls")
write_excel(schools, "江西省")