社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用 Python 自动化操作 Excel 制作报表,真的是太方便啦!!!

AI科技大本营 • 1 年前 • 260 次点击  
作者 | 俊欣
来源 | 关于数据分析与可视化
今天小编来介绍一下如何用Python来操作Excel文件,当中需要用到的模块叫做openpyxl,其中我们会涉及到一些基本常规的操作,例如有
  • 插入与查询数据
  • 分类统计数据
  • 数据的可视化
  • 字体颜色的更改
  • 等等

基本操作

小编默认大家已经都安装好了openpyxl模块了,要是还没有安装的话,可以通过pip命令行,代码如下
pip install openpyxl
我们首先来导入Excel数据集,代码如下



    
# 导入模块
from openpyxl import Workbook, load_workbook

# 导入Excel数据集
wb = load_workbook(r"grades.xlsx")

# 得到正在运行的工作表
sheet = wb.active

# 工作表的名称叫做
print(sheet)
output
"Class A">

打印出工作表中的值

我们通过传入单元格的位置来打印其中的数值,代码如下
print(sheet["A1"].value)
print(sheet["A2"].value)
print(sheet["B3"].value)
output
Name
Test
Male

改变某个单元格的数值

我们还可以尝试来改变某个单元格的数值,代码如下
sheet["A1"] = "Dylan"

# 保存
wb.save(r"grades.xlsx")
在保存过之后,我们来看一下结果如何,如下图所示

添加一个工作表

我们尝试在现有的Excel当中添加一个工作表,代码如下
# 添加一个新的工作表
wb.create_sheet("Class B")

# 返回以列表形式带有工作表名称
print(wb.sheetnames)
output
['Class A''Class B']

插入数据

我们尝试新建一个工作簿,并且插入若干条数据,代码如下



    
# 创建一个新的工作簿
new_wb = Workbook()
ws = new_wb.active

# 重命名工作表的名称
ws.title = "Test1"

# 插入数据到新建的工作表中
ws.append(["This","is","a","test"])
new_wb.save("test.xlsx")
我们来看一下最后出来的结果,如下图所示
我们尝试来多插入几条数据,代码如下
# 插入更多的数据
ws.append(["This","Is","Another","Test"])
ws.append(["And","Yet","Another","Test"])
ws.append(["End"])

# 保存
new_wb.save("test.xlsx")

插入行与删除行

如果是想插入某一行的话,调用的则是insert_rows()方法,具体代码如下
# 前面的步骤一样,导入工作簿和数据
ws.insert_rows(1)
wb.save("test.xlsx")
出来的结果如下图所示
同理,如果是想要去删除某一行的数据的话,调用的则是delete_rows()方法,具体代码如下
ws.delete_rows(1)
# 保存
wb.save("test.xlsx")
出来的结果如下图所示

插入列与删除列

我们来看一下该如何插入列和删除列,插入列用到的方式是insert_cols(),代码如下
# 新插入一列
ws.insert_cols(2)
结果如下
而删除列的方法是delete_cols()
ws.delete_cols(1,2)

数据的分析与可视化

我们还可以进行一系列的数据统计分析,首先我们先把需要用到的数据放入至Excel当中去,
sales_data = {
           "苹果": {"北京": 5000, "上海": 7000, "深圳": 6000, "香港": 10000},
           "华为": {"北京": 8000, "上海": 4000, "深圳": 3000, "香港": 9000},
           "小米": {"北京": 6000, "上海": 9000, "深圳": 5000, "香港": 6000},
           "vivo": {"北京": 3000, "上海": 5000, "深圳": 4000, "香港": 7000}
            }
小编随意生成了一点数据,并且将其放置到Excel当中去,代码如下
# 创建一个新的工作簿
sales_wb = Workbook()
ws = sales_wb.active

# 重命名工作表的名称
ws.title = "Sales"

# 创建列名
column_names = ["Product Name"] + list(sales_data["苹果"].keys())
ws.append(column_names)

# 将一系列的数值都放置到工作表当中去
for product in sales_data:
    sales = list(sales_data[product].values())
    ws.append([product] + sales)

sales_wb.save("sales_data.xlsx")
我们来看一下出来的结果,如下图所示

平均值的计算

我们来指定某一列,并且求出其平均值,代码如下
ws['B6'] = '=AVERAGE(B2:B5)'

sales_wb.save("sales_data.xlsx")
我们来看一下出来的结果,如下图所示

求和的计算

我们为每一座城市的销售额都来做一个求和的计算,我们写一个for循环来遍历每一列,将每一列当中的数据做一个求和,代码如下
# 再添加新的一行的名称
ws['A' + str(ws.max_row + 1)] = "Total Sales"

# 遍历再求和
for col in range(2, len(sales_data["苹果"]) + 2):
    char = get_column_letter(col)
    ws[char + '6'] = f"=SUM({char + '2'}:{char + '5'})"
我们来看一下出来的结果,如下图所示

字体颜色的更改

我们也可以来更改字体的颜色,使得更加美观一些,代码如下
for col in range(1,ws.max_column+1):
    ws[get_column_letter(col) + '1'].font = Font('Arial', bold=True, size=13, color='00000080')
    
sales_wb.save("sales_data.xlsx")
我们来看一下美化过之后的结果,如下图所示

画个柱状图出来

最后的最后,我们来绘制一张柱状图,来看一下不同的产品在每一个城市的销售数据如何,横坐标对应的产品类目,而纵坐标对应的则是销售数据,另外我们根据不同的城市会用不用的颜色来标注出来,代码如下
from openpyxl.chart import BarChart, Reference

# 新建一个柱状图实例
barchart = BarChart()

# 确定数据的范围
data = Reference(ws, min_col=ws.min_column+1, max_col=ws.max_column, min_row=ws.min_row, max_row=ws.max_row-1)
categories = Reference(ws, min_col=ws.min_column, max_col=ws.min_column, min_row=ws.min_row+1, max_row=ws.max_row-1)

# 添加数据以及类目
barchart.add_data(data, titles_from_data=True)
barchart.set_categories(categories)

# 绘制的数据放在哪个位置
ws.add_chart(barchart, "G1")

# 添加标题
barchart.title = '每座城市的产品销售数据'

# 图表的类型
barchart.style = 2

sales_wb.save("sales_data.xlsx")
我们来看一下最后出来的结果,如下图所示


往期回顾

“如今,99%以上的代码都是垃圾!”


Deepfake 技术换脸真假难辨!


pandas常用的8个option设置!


7岁男童因下棋太快,被机器人夹断手指?


分享

点收藏

点点赞

点在看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/138355
 
260 次点击