没有转义的Excel!
Excel无处不在,即使我们使用了Python之类强大的辅助工具,依然无法摆脱Excel。
因为你的老板和同事仍然需要方便的方法来访问重要数据。
但是,这并不意味着你不能通过使用Python简化使用Excel的工作,而这整个过程都不需要你触碰Excel!
使用Python自动化Excel报表
你还在每天做着没完没了的Excel报表吗?你还在为不同的客户做着相同的事情吗?
让Python帮你!
我们来实现Excel报表的自动化
让我们快速看一下我们将要自动化的东西!我们将使用以下链接中Pandas数据透视表中的数据:
/a-step-by-step-guide-to-pandas-pivot-tables-e0641d0c6c70
数据格式需要与客户公司数据库中获得的数据格式相匹配。
我们按区域细分该数据,并创建两个汇总表,包括格式和图表,这些动作都不需要打开Excel!
数据可视化最终形式:从一个工作表到四个可视化报表
加载数据库
在这里,我们将使用Pandas和Openpyxl。如果你不知道Openpyxl,建议先找官方文档进行学习。我们将使用Python自动化3个Excel任务!
# 第1部分-加载我们的库import pandas as pdfrom openpyxl import load_workbookfrom openpyxl.styles import Fontfrom openpyxl.chart import BarChart, Reference
我们将使用两个库:
Pandas负责转换我们的数据并创建最初的Excel文件
Openpyxl格式化我们的工作表并插入图表
加载数据
让我们加载数据并快速查看我们正在使用的数据!
正如我所提到的,数据的含义类似于你从公司数据库系统中获得的数据。
#第2部分-加载我们的数据df = pd.read_excel("/datagy/pivot_table_pandas/raw/master/sample_pivot.xlsx", parse_dates=["Date"])print(df.head())# Date Region Type Units Sales#0 -07-11 East Children"s Clothing 18.0 306#1 -09-23 North Children"s Clothing 14.0 448#2 -04-02 South Women"s Clothing 17.0 425#3 -02-28 East Children"s Clothing 26.0 832#4 -03-19 West Women"s Clothing 3.0 33
在这里,我们使用pandas读取一个Excel文件,将日期列解析为日期。
创建数据透视表
让我们创建最终报告中需要的汇总表。
# 第3部分-测试数据透视表filtered = df[df["Region"] == "East"]quarterly_sales = pd.pivot_table(filtered, index = filtered["Date"].dt.quarter, columns = "Type", values = "Sales", aggfunc="sum")print("Quarterly Sales Pivot Table:")print(quarterly_sales.head())#季度销售数据透视表:#Type Children"s Clothing Men"s Clothing Women"s Clothing#Date #1 12274 13293 16729#2 5496 17817 22384#3 14463 9622 15065#4 13616 10953 16051
创建第一个Excel文件
有了透视表,现在我们将其加载到一个Excel文件中。
我们将使用pandas加载该Excel文俊:
# 第04部分-创建和Excel工作簿file_path = #Path to where you want your file savedquarterly_sales.to_excel(file_path, sheet_name = "Quarterly Sales", startrow=3)
让我们快速了解一下我们在做什么:
创建一个文件路径变量来标识我们要将文件存储在何处
使用ExcelWriter保存文件
将两个数据透视表都保存到单独的工作表中,从第3行开始(稍后从头开始使用)
让我们的报表更漂亮
Pandas有助于将数据转换为Excel。接下来,让我们把表格再美化一下,并添加一些可视化效果。
# 第05部分-加载工作簿wb = load_workbook(file_path)sheet1 = wb["Quarterly Sales"]# 第06部分-格式化第一页sheet1["A1"] = "Quarterly Sales"sheet1["A2"] = "datagy.io"sheet1["A4"] = "Quarter"sheet1["A1"].style = "Title"sheet1["A2"].style = "Headline 2"for i in range(5, 9): sheet1[f"B{i}"].style="Currency" sheet1[f"C{i}"].style="Currency" sheet1[f"D{i}"].style="Currency"# 第07部分-添加条形图bar_chart = BarChart()data = Reference(sheet1, min_col=2, max_col=4, min_row=4, max_row=8)categories = Reference(sheet1, min_col=1, max_col=1, min_row=5, max_row=8)bar_chart.add_data(data, titles_from_data=True)bar_chart.set_categories(categories)sheet1.add_chart(bar_chart, "F4")bar_chart.title = "Sales by Type"bar_chart.style = 3wb.save(filename = file_path)
这段代码里包含了很多内容,下面来给大家详细讲解!
在第5部分中,我们将工作簿和工作表加载到Openpyxl可以处理的单独对象中。
第6部分还有更多内容:
在单元格A1和A2中为sheet1添加标题和副标题。
更改了四分之一列的标题,以更好地反映数据。
将样式应用于标题和副标题。
将金融领域的单元格更改为货币。 这需要一次应用于一个单元, 这就是为什么我们使用for循环的原因。
在第7部分中,我们添加了条形图:
创建一个BarChart对象,并标识存储数据和类别的字段。
然后将数据和类别应用于对象。
最后,我们添加一个描述性的标题和样式。Openpyxl使用多种样式-尝试所有样式!
这是我们的工作表现在的样子:
我们的工作成果之一
为多个表格自动化此工作流程
只处理表格中的一部分不是我们高效工作的宗旨,让我们对所有带有for循环的区域执行此操作。
# 第08部分-获取地区名称regions = list(df["Region"].unique())# 第09部分-所有区域的循环folder_path = #插入要保存报表的文件夹的路径for region in regions: filtered = df[df["Region"] == f"{region}"] quarterly_sales = pd.pivot_table(filtered, index = filtered["Date"].dt.quarter, columns = "Type", values = "Sales", aggfunc="sum") file_path = f"{path to your folder}{region}.xlsx" quarterly_sales.to_excel(file_path, sheet_name = "Quarterly Sales", startrow=3) wb = load_workbook(file_path) sheet1 = wb["Quarterly Sales"] sheet1["A1"] = "Quarterly Sales" sheet1["A2"] = "datagy.io" sheet1["A4"] = "Quarter" sheet1["A1"].style = "Title" sheet1["A2"].style = "Headline 2" for i in range(5, 10): sheet1[f"B{i}"].style="Currency" sheet1[f"C{i}"].style="Currency" sheet1[f"D{i}"].style="Currency" bar_chart = BarChart() data = Reference(sheet1, min_col=2, max_col=4, min_row=4, max_row=8) categories = Reference(sheet1, min_col=1, max_col=1, min_row=5, max_row=8) bar_chart.add_data(data, titles_from_data=True) bar_chart.set_categories(categories) sheet1.add_chart(bar_chart, "F4") bar_chart.title = "Sales by Type" bar_chart.style = 3
我们来仔细分析这一部分的代码:
在第8部分中,我们创建一个列表,其中包含我们要覆盖的不同区域的所有唯一值。
在第9部分中,我们在for循环中重复前面的代码:
创建了一个新变量,该变量保存要保存文件的文件夹的路径。
使用f字符串将区域名插入到脚本中,使其对每个区域都是动态的。
接下来是什么?
Python的好处在于可重复执行任务的可伸缩性。
你可以想象一下,利用以上步骤,快速创建报表, 每天能节省多少时间?
结论
在这个简短的教程中我们学到了很多东西! 我们将表格转换为一组数据透视表,将它们导出到单独的工作簿中,然后将格式和图形应用于每个工作表格!