在机器学习模型的建立中,不得不借助于Excel强大的统计分析能力,这个时候就牵涉到了如何将python直接处理得到的数据存入excel表格当中以及获取表格的数据进行分析,简单的说,学会使用Python操作Excel文件后,可以运用到机器学习之中,也可以让平常生活中繁琐的工作自动化处理。
openpyxl包安装
Python处理Excel的包是openpyxl,如果你是直接下载的anaconda安装的Python库,那么下载的时候,自带的就已经安装了openpyxl,如果不是,也可以直接在cmd之中,使用pip install openpyxl安装。
安装完成之后,我们应该了解一下Excel的组成部分,如下图所示:
openpyxl读取excel
看到上图就应该知道,首先,我们应该获取Excel文件:
import openpyxl as openpyxl
wb = openpyxl.load_workbook('myexcel.xlsx')
读取excel文件常见问题解决:
raise IOError("File contains no valid workbook part")
OSError: File contains no valid workbook part
原因:用openpyxl 模块读取了xls格式的excel,或者读取的是xls文件通过改变后缀变成xlsx格式的文件
解决:重新创建xlsx的文件
zipfile.BadZipFile: File is not a zip file
之前的文件另存为就解决了这个问题,然后把包名也换了,然后就不报错了
对于已经有Excel目标文件来说,使用以上方法,就可以直接获取excel文件,如果你想重新创建一个全新的Excel文件:
wb = openpyxl.Workbook()
已经获取了Excel,但其实我们的数据都在一个一个的表中,如下图所示:
一个Excel文件中可以有多个表,一般而言操作的都是第一个表,而获取表的方法也有很多,比如:
sheet = wb.worksheets[0]
sheet = wb['sheet1']
以上两种方式都是获取第一个表,要是我们使用wb=openpyxl.Workbook()方式,新创建的一个Excel呢?我们需要创建一个操作的表格:
wb.create_sheet(index=0,title='小猪')
wb.create_sheet(index=1,title='佩奇')
读取excel表数据
当我们获取表格之后,就可以快乐的操作我们的数据了。
比如这个时候,你想获取表格中的A1单元格中的文本,就可以使用如下方法:
import os
from openpyxl import Workbook
from openpyxl import load_workbook
filename = 'my_excel.xlsx'
if os.path.exists(filename):
wb = load_workbook(filename)
else:
wb = Workbook()
sheet = wb.worksheets[0]
sheet = wb['Sheet1']
print(sheet['B2'].value)
输出结果展示:
要遍历某个表格中的所有数据,该怎么操作呢?这里我们先假如我有如下表格:
那么遍历起来的代码如下:
import os
from openpyxl import Workbook
from openpyxl import load_workbook
filename = 'my_excel.xlsx'
if os.path.exists(filename):
wb = load_workbook(filename)
else:
wb = Workbook()
sheet = wb.worksheets[0]
sheet = wb['Sheet1']
for row in sheet.iter_rows():
for cell in row:
print(cell.coordinate, cell.value) # 坐标; 值
上面是逐行遍历,首先我们获取Excel文件,然后获取当中的第一个表格,然后通过获取行数,以及列数进行遍历,openpyxl获取行数的方法为sheet.iter_rows(),获取列数可以直接通过当前行获取也就是for cell in row,代码简洁明了,实现效果如下:
更新excel表数据
那么怎么修改数据呢?我们先来看看代码:
sheet['A1'].value = '唤醒手腕'
sheet.cell(1, 1).value = '唤醒手腕'
sheet.cell(1, 1, '唤醒手腕')
这三种方式,都可以修改Excel某个单元格数据,同时也可以通过前两种方式获取到这个单元格的值,python的优点就是这么简单明了。
经过这些操作之后,我们还有一个事情要做,那就是如果保存我们创建,或者修改过后的Excel,其实也很简单,一句话就可以做到,代码如下:
wb.save('new_my_excel.xlsx')
excel单元格遍历
单元格遍历
ws.values 返回的是生成器,是将一行数据作为一个元组单元组成的,是由值组成的
ws.values 获取的内容是从 “A1” 到 “最大行最大列”
ws.values # <generator object values at 0x00000297EAB07F68>
for item in sheet.values:
print(item)
"""
('index', 'name', 'school', 'age')
(1, '唤醒手腕', '清华大学', 20)
(2, '菠萝吹雪', '浙江大学', 22)
(3, '麦克劳林', '武汉大学', 24)
"""