Python处理Excel效率高十倍(下篇)通篇硬干货,再也不用加班啦

Python041

Python处理Excel效率高十倍(下篇)通篇硬干货,再也不用加班啦,第1张

《用Python处理Excel表格》下篇来啦!

身为工作党或学生党的你,平日里肯定少不了与Excel表格打交道的机会。当你用Excel处理较多数据时,还在使用最原始的人工操作吗?现在教你如何用Python处理Excel,从此处理表格再也不加班,时间缩短数十倍!

上篇我们进行了一些事前准备,目的是用Python提取Excel表中的数据。而这一篇便是在获取数据的基础上,对Excel表格的实操处理。

第9行代码用来指定创建的excel的活动表的名字:

·不写第9行,默认创建sheet

·写了第9行,创建指定名字的sheet表

第9行代码,通过给单元格重新赋值,来修改单元格的值

第9行代码的另一种写法sheet['B1'].value = 'age'

第10行代码,保存时如果使用原来的(第7行)名字,就直接保存;如果使用了别的名字,就会另存为一个新文件

插入有效数据

使用append()方法,在原来数据的后面,按行插入数据

·insert_rows(idx=数字编号, amount=要插入的行数),插入的行数是在idx行数的下方插入

·insert_cols(idx=数字编号, amount=要插入的列数),插入的位置是在idx列数的左侧插入

·delete_rows(idx=数字编号, amount=要删除的行数)

·delete_cols(idx=数字编号, amount=要删除的列数)

move_range(“数据区域”,rows=,cols=):正整数为向下或向右、负整数为向左或向上

举个例子:

openpyxl.styles.Font(name=字体名称,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)

其中,字体颜色中的color是RGB的16进制表示

再者,可以使用for循环,修改多行多列的数据,在这里介绍了获取的方法

Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)

水平对齐:‘distributed’,‘justify’,‘center’,‘left’, ‘centerContinuous’,'right,‘general’

垂直对齐:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’

当然,你仍旧可以调用for循环来实现对多行多列的操作

设置行列的宽高:

·row_dimensions[行编号].height = 行高

·column_dimensions[列编号].width = 列宽

合并单元格有下面两种方法,需要注意的是,如果要合并的格子中有数据,即便python没有报错,Excel打开的时候也会报错。

merge_cells(待合并的格子编号)

merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)

拆分单元格的方法同上

unmerge_cells(待合并的格子编号)

unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)

create_sheet(“新的sheet名”):创建一个新的sheet表

第11行,使用title修改sheet表的名字

remove(“sheet名”):删除某个sheet表

要删除某sheet表,需要激活这个sheet表,即:将其作为活动表(关于活动表的定义请看前面文章开头写的有)下面8~11行代码展示了原始活动表与手动更换活动表,第13行代码删掉活动表

背景知识

numpy与pandas

NumPy是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库;pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,我们需要利用Pandas进行Excel的合并

1.下面的代码生成了一个5行3列的包含15个字符的嵌套列表

(注意,第4行代码:15是等于35的,如果是15对应43,或者16对应5*3都会报错)

(注意,第5行代码,虽然5行3列是15个数据,但是可以指定数据从1开头,到16结束)

2.添加表头

使用pandas库的DataFrame来添加表头。关于打印的结果,把最左侧的一列去掉之后会发现结果很和谐,这是因为最左侧的一列代表行号。此时xx变量的类型是

xlsxwriter模块一般是和xlrd模块搭配使用的,

xlsxwriter:负责写入数据,

xlrd:负责读取数据。

1.创建一个工作簿

2.创建sheet表

3.写入数据

① 相比Excel,Python能够处理更大的数据集能够更容易的实现自动化分析能够比较容易的建立复杂的机器学习模型

② 相比spss,spss是个统计软件,只适合在科学研究领域做实验数据的分析,并不适合做偏向实际应用场景的数据的分析而Python能够处理复杂的数据逻辑,适合这些场景

③ 相比R语言,Python的机器学习库只有一个—sklearn,所有的机器学习方法都集中在这一个库中,而R语言,我们并不清楚它到底有多少个用来做机器学习的库,R语言中的机器学习方法是如此的分散,以至于很难掌握。而且Python的使用人数在不断上升,有一些曾经只使用R的人在转向Python,投入到一个呈现上升趋势的技术中,未来才会更加宽广。

④ 相比上述的几个工具,Python在做机器学习,网络爬虫,大数据分析时更加的得心应手。

因为Python拥有像海一样丰富的第三方库,所以Python在数据分析方面能够处理的问题非常之广,从Excel比较擅长的公式计算,数据透视分析,到MATLAB比较擅长的科学计算,再到R语言中那些零散的机器学习库所能做的事情,Python都能优雅从容的面对。而这些工具不擅长的网络爬虫,大数据分析(结合spark),Python更是能够出色的完成。

Python对于Excel的操作是多种多样的,掌握了相关用法就可以随心所欲的操作数据了!

操作xls文件

xlrd(读操作):

import xlrd

1、引入xlrd模块

workbook=xlrd.open_workbook("36.xls")

2、打开[36.xls]文件,获取excel文件的workbook(工作簿)对象

names=workbook.sheet_names()

3、获取所有sheet的名字

worksheet=workbook.sheet_by_index(0)

4、通过sheet索引获得sheet对象

worksheet为excel表第一个sheet表的实例化对象

worksheet=workbook.sheet_by_name("各省市")

5、通过sheet名获得sheet对象

worksheet为excel表sheet名为【各省市】的实例化对象

nrows=worksheet.nrows

6、获取该表的总行数

ncols=worksheet.ncols

7、获取该表的总列数

row_data=worksheet.row_values(n)

8、获取该表第n行的内容

col_data=worksheet.col_values(n)

9、获取该表第n列的内容

cell_value=worksheet.cell_value(i,j)

10、获取该表第i行第j列的单元格内容

xlwt(写操作):

import xlwt

1、引入xlwt模块

book=xlwt.Workbook(encoding="utf-8")

2、创建一个Workbook对象,相当于创建了一个Excel文件

sheet = book.add_sheet('test')

3、创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。

sheet.write(i, j, '各省市')

4、向sheet表的第i行第j列,写入'各省市'

book.save('Data\\36.xls')

5、保存为Data目录下【36.xls】文件

操作xlsx文件

openpyxl(读操作):

import openpyxl

1、引入openpyxl模块

workbook=openpyxl.load_workbook("36.xlsx")

2、打开[36.xlsx]文件,获取excel文件的workbook(工作簿)对象

names=workbook.sheetnames

worksheet=workbook.worksheets[0]

worksheet=workbook["各省市"]

ws = workbook.active

6、获取当前活跃的worksheet,默认就是第一个worksheet

nrows=worksheet.max_row

7、获取该表的总行数

ncols=worksheet.max_column

8、获取该表的总列数

content_A1= worksheet['A1'].value

9、获取该表A1单元格的内容

content_A1=worksheet.cell(row=1,column=1).value

10、获取该表第1列第1列的内容

openpyxl(写操作):

workbook=openpyxl.Workbook()worksheet = workbook.active

3、获取当前活跃的worksheet,默认就是第一个worksheet

worksheet.title="test"

4、worksheet的名称设置为"test"

worksheet = workbook.create_sheet()

5、创建一个新的sheet表,默认插在工作簿末尾

worksheet.cell(i,j,'空')

6、第i行第j列的值改成'空'

worksheet["B2"]="空"

7、将B2的值改成'空'

worksheet.insert_cols(1)

8、在第一列之前插入一列

worksheet.append(["新增","台湾省"])

9、添加行

workbook.save("Data\\36.xlsx")

10、保存为Data目录下【36.xlsx】文件

pandas处理excel文件

pandas操作:

import pandas as pd

1、引入pandas模块

data = pd.read_excel('36.xls')

2、读取[36.xls]或者[36.xlsx]文件

data = pd.read_csv('36.csv')

3、读取[36.csv]文件

data=data.dropna(subset=['店铺'])

4、过滤掉data店铺列有缺失的数据

data.sort_values("客户网名", inplace=True)

5、将data数据按照客户网名列进行从小到大排序

data = pd.read_csv(36.csv, skiprows = [0,1,2],sep = None, skipfooter = 4)

6、读取[36.csv]文件,前三行和后四行的数据略过

data = data.fillna('空')

7、将data中的空白处填充成'空'

data.drop_duplicates('订单','first',inplace=True)

8、data中的数据,按照【订单】列做去重处理,保留第一条数据

data=pd.DataFrame(data,columns=['订单','仓库'])

9、只保留data中【订单】【仓库】列的数据

data = data[(data[u'展现量'] >0)]

10、只保留【展现量】列中大于0的数据

data= data[data["订单"].str.contains('000')]

11、只保留【订单】列中包含'000'的数据

data= data[data["仓库"]=='正品仓']

12、只保留【仓库】列是'正品仓'的数据

xs= data[data["店铺"]=='南极人']['销售额']

13、获取店铺是南极人的销售额数据

data['订单'] = data['订单'].str[3:7]

14、【订单】列的值只保留4-8个字节的值

data["邮资"] = np.where((data['店铺'].str.contains('T|t')) &-(data['仓库'] == '代发仓'), 8, data['邮资'])

15、满足店铺列包含 T 或 t 并且仓库不等于'代发仓'的话,将邮资的值改成8,否则值不变

data = np.array(data).tolist()

16、将data从DataFrame转换成列表

data=pd.DataFrame(data)

17、将列表转换成DataFrame格式

zhan = data[u'展现'].sum().round(2)

18、将data中所有展现列数据求和,并取两位小数

sum=data.groupby(['店铺'])['刷单'].sum()

19、将data中按照店铺对刷单进行求和

counts=data['店铺'].value_counts()

20、将data按照店铺进行计算

avg=data.groupby(['店铺'])['刷单'].mean()

21、将data按照店铺对刷单进行求平均数

count = pd.concat([counts,sum], axis=1, ignore_index=True, sort=True)

22、将counts和sum两个DataFrame进行了组合

count=count.rename(index=str, columns={0: "订单", 1: "成本"})

23、将新生成的DataFrame列名进行修改

data = pd.merge(sum, counts, how='left', left_on='店铺', right_on='店铺')

24、将列表转换成DataFrame格式

from openpyxl import Workbook 

wb=Workbook()  

ws1=wb.active 

data.to_excel('36.xlsx') 

wb.close()

25、data完整的写入到关闭过程,执行此操作的时候【36.xlsx】不能是打开状态

excel格式操作

样式处理:

1、打开【36.xlsx】

sheet=workbook.worksheets[0]

2、将第一个sheet对象赋值给sheet

sheet.column_dimensions['A'].width = 20.0

3、将A列的宽度设置为20

sheet.row_dismensions[1].height = 20.0

4、将第一行的行高设置为20

sheet.merge_cells('A1:A2')

5、将sheet表A1和A2单元格合并

sheet.unmerge_cells('A1:A2')

6、将sheet表A1和A2单元格取消合并

sheet.insert_rows(2,2)

7、将sheet表从第2行插入2行

sheet.insert_cols(3,2)

8、将sheet表从第3列插入2列

sheet.delete_rows(2)

9、删除第2行

sheet.delete_cols(3, 2)

10、将sheet表从第3列开始删除2列

from openpyxl.styles import Font, Border, PatternFill, colors, Alignment

11、分别引入字体、边框、图案填充、颜色、对齐方式

sheet.cell(i,j).font = Font(name='Times New Roman', size=14, bold=True, color=colors.WHITE)

12、设置sheet表第 i 行第 j 列的字体

sheet.cell(i,j).alignment = Alignment(horizontal='center', vertical='center')

13、设置sheet表第 i 行第 j 列的字体对齐方式

left, right, top, bottom = [Side(style='thin', color='000000')] * 4sheet.cell(i,j).border = Border(left=left, right=right, top=top, bottom=bottom)

14、引入边框样式并调用

fill = PatternFill("solid", fgColor="1874CD")sheet.cell(1,j).fill = fill

15、引入填充样式,并调用

import xlrd

from openpyxl import Workbook

from openpyxl import load_workbook

workbook=load_workbook(filename='C:/Users/EDZ/Desktop/工作/2021.08.03/大兄弟.xlsx')

sheet=workbook.active

sheet.insert_cols(idx=1)

sheet.merge_cells(A1:A3)

sheet['A1']=['上海','山东','浙江']