为什么要学会使用Excel
在机器学习模型的建立中,不得不借助于Excel强大的统计分析能力,这个时候就牵涉到了如何将python直接处理得到的数据存入excel表格当中以及获取表格的数据进行分析,简单的说,学会使用Python操作Excel文件后,可以运用到机器学习之中,也可以让平常生活中繁琐的工作自动化处理。
Excel的基本使用
Python处理Excel的包是openpyxl,如果你是直接下载的anaconda安装的Python库,那么下载的时候,自带的就已经安装了openpyxl,如果不是,也可以直接在cmd之中,使用pip install openpyxl安装。
安装完成之后,我们应该了解一下Excel的组成部分,如下图所示:
看到上图就应该知道,首先,我们应该获取Excel文件:
wb=openpyxl.load_workbook('1234.xlsx')
对于已经有Excel目标文件来说,使用以上方法,就可以直接获取excel文件,如果你想重新创建一个全新的Excel文件,不妨试试以下方式:
wb=openpyxl.Workbook()
已经获取了Excel,但其实我们的数据都在一个一个的表中,如下图所示:
一个Excel文件中可以有多个表,一般而言操作的都是第一个表,而获取表的方法也有很多,比如:
sheet=wb.worksheets[
0]
sheet=wb[
'吸入类']
以上两种方式都是获取第一个表,要是我们使用wb=openpyxl.Workbook()方式,新创建的一个Excel呢?我们需要创建一个操作的表格:
wb.create_sheet(index=
0,title=
'小猪')
wb.create_sheet(index=
1,title=
'佩奇')
当我们获取表格之后,就可以快乐的操作我们的数据了。
比如这个时候,你想获取表格中的A1单元格中的文本,就可以使用如下方法:
sheet['A1'].value
以上是获取单个单元格的数据,现在我有一个需求,要遍历某个表格中的所有数据,该怎么操作呢?这里我们先假如我有如下表格:
那么遍历起来的代码如下:
import openpyxl
wb=openpyxl.load_workbook(
'1234.xlsx')
sheet=wb.worksheets[
0]
for row
in sheet.iter_rows():
for cell
in row:
print(cell.coordinate, cell.value)
上面是逐行遍历,首先我们获取Excel文件,然后获取当中的第一个表格,然后通过获取行数,以及列数进行遍历,openpyxl获取行数的方法为sheet.iter_rows(),获取列数可以直接通过当前行获取也就是for cell in row,代码简洁明了,实现效果如下:
那么怎么修改数据呢?我们先来看看代码:
sheet[
'A1'].value=
'1111111'
sheet.cell(
1,
1).value=
'1111111'
sheet.cell(
1,
1,
'111111')
这三种方式,都可以修改Excel某个单元格数据,同时也可以通过前两种方式获取到这个单元格的值,python的优点就是这么简单明了。
经过这些操作之后,我们还有一个事情要做,那就是如果保存我们创建,或者修改过后的Excel,其实也很简单,一句话就可以做到,代码如下:
wb.save('1234.xlsx')
这样就将操作的数据,保存到当前目录之下的1234.xlsx中,同样写绝对路径也行。
Excel的样式
在平常的生活当中,Excel表格并不仅仅是写入数据,修改数据,保存数据这样简单的操作,其实还有如果让Excel变的更加美观,比如修改某些字体,边框样式等等等等。
字体样式
那好,我们先来说说如何修改字体这样的样式,我们openpyxl里面有专门的字体样式,可以通过以下方式导入,使用的代码如下:
from openpyxl.styles
import Font, PatternFill, Border, Side, Alignment
font = Font(name=
'微软雅黑', size=
10, bold=
False, italic=
False, vertAlign=
None,
underline=
'none', strike=
False, color=
'FF000000')
这里我们先引入了Excel中的字体样式,然后通过构造函数,创建了一个样式,比如这里创建的字体为微软雅黑,字体大小为10,不加粗,没有斜体,没有下划线,没有删除线,颜色为黑色。
尽然我们创建了一个样式,接下里就是将样式设置到单元格中去,比如将刚才的样式设置到表格11单元格中,以下两种方式都行,代码如下:
sheet[
'A1'].font=font
sheet.cell(
1,
1).font=font
填充样式
说完字体样式,第二个运用最多的就是填充样式,比如给某个单元格填充背景色,或者填充图案等等等等,我们先来看看代码的操作方式:
fill = PatternFill(fill_type=
'darkUp',start_color=
'FFFF00',end_color=
'FF0000')
sheet.cell(
1,
1).fill=fill
这段代码实现的样式如下:
可以看到它的图案类型为darkUp,开始颜色行色,结束颜色为红色,红黄相间的格栅化样式填充,当然它的图案类型还有很多,以下都是:
{"gray0625’, "lightHorizontal’, "darkVertical’, "darkGray’, "darkDown’, "solid’, "lightTrellis’, "darkHorizontal’, "gray125’, "lightGray’, "lightDown’, "lightUp’, "mediumGray’, "darkUp’, "darkGrid’, "darkTrellis’, "lightVertical’, "lightGrid’}
具体用到哪个,还要根据你的需求自由的选择,重点需要说明的是,当图案为solid时,默认只填充start_color颜色,也就是黄色,有兴趣的可以试试。
边框样式
第三个要介绍的就是边框样式,边框样式在实际的工作中,可以说也是用的比较多的,了解一下对于实际的工作还是有好处的,操作代码如下:
border = Border(left=Side(border_style=
'dashDotDot',color=
'9932CC'),
right=Side(border_style=
'dashDotDot',color=
'121212'),
top=Side(border_style=
'dashDotDot',color=
'8B0A50'),
bottom=Side(border_style=
'dashDotDot',color=
'B3EE3A'),)
sheet.cell(
5,
4).border=border
上面设置了上下左右四个边框的颜色以及样式,这里我都设置为虚线样式,颜色随机抽取了四个比较深的颜色,实现的效果如下图所示(上红,下绿,左紫,右黑):
当然边框还有很多参数的,如果想运用的更多更广,可以参考openpyxl开发文档,博主这里只介绍最常用的边框样式。
对齐样式
最后一个样式为对齐样式,相对于上面三种样式来说,这个对齐样式每次几乎都用到,现在我们先来弄一个单元格居中对齐,代码如下:
alignment = Alignment(horizontal=
'center',
vertical=
'center',
text_rotation=
0,
indent=
0)
sheet.cell(
5,
3).alignment=alignment
这里我们设置了对齐样式为水平居中,垂直居中,文字旋转角度为0(最多可以旋转180°),缩进为0,比如旋转90度,文字就变成了如下图所示的样式:
当然这种对齐样式还有许多其他参数,但用的最多的也就是这些,如果想了解其他的请前往openpyxl开发文档了解最详细的参数。这里就不做过多的赘述了。
Excel公式
链接公式
样式说完了,我们还需介绍一下Excel公式的应用,比如我们有些Excel表格中有链接,就需要用公式把链接设置成可以点击的超链接模式,同样比如计算某些值的时候,也会用到Excel公式。我们先来讲解以下如何让URL链接可以点击,代码如下:
sheet.cell(6,3).value='=HYPERLINK("%s","%s")' % ("https://www.baidu.com", "百度一下")
上面代码理解起来很简单,就是我要在第六行第三列输入百度一下,且百度一下可以点击跳转到指定的网页之中(第一个参数就是需要跳转的地址)。
这里其实就是excel中的公式,当然你也可以设置某个目录下的exe文件,点击后直接执行exe,也可以设置跳转到某个单元格,比如想点击后跳转到A1,代码如下:
sheet.cell(6,3).value='=HYPERLINK("%s","%s")' % ("#A1", "跳转到A1")
计算公式操作
现在我还有一个需求,比如我要计算下面表中A1到E1这5个数的和,在Excel应该怎么操作呢?
其实也和上面一样,只要你知道Excel中的计算和公式,就可以直接套用到代码中,这样哪怕是编程小白,也基本可以掌握公式的应用规则,因为只要会Excel的都会知道,代码如下:
sheet['F1']='=SUM(A1:E1)'
Excel单元格的合并与拆分
Excel估计已经介绍的差不多了,不过博主刚刚想起来,应该还有一个常用的操作方式,就是合并单元格,这里我们同样先来看一段代码:
sheet.merge_cells('A1:E1')
合并也是操作表结构,这里合并刚上面那个表的数字,可以看到我们合并了A1到E1的所有单元格,同时,合并后的单元格显示第一个单元格内容。
熟话说得好,有合并就有拆分,同样我们也需要拆分单元格,那这样,我们就把先合并的单元格,在拆分成原来的样子,代码如下:
sheet.unmerge_cells('A1:E1')
很简单,代码前面加一个un就行,但这里有一个需要注意的地方,刚合并单元格,默认填充的是第一个单元格中的数据,但拆分单元格,并不会自动填充数据,原先有的整个数据显示在第一个单元格之中,而其他拆分出来的单元格,不会显示任何数据。
总结了这么多,相信对经常使用Excel的小伙伴应该会有所帮助,如果写的还可以记得给点个赞!