Excel無處不在,即使我們使用了Python之類強大的輔助工具,依然無法擺脫Excel。
因為你的老板和同事仍然需要方便的方法來訪問重要數(shù)據(jù)。
但是,這并不意味著你不能通過使用Python簡化使用Excel的工作,而這整個過程都不需要你觸碰Excel!
你還在每天做著沒完沒了的Excel報表嗎?你還在為不同的客戶做著相同的事情嗎?
讓Python幫你!
讓我們快速看一下我們將要自動化的東西!我們將使用以下鏈接中Pandas數(shù)據(jù)透視表中的數(shù)據(jù):
https://towardsdatascience.com/a-step-by-step-guide-to-pandas-pivot-tables-e0641d0c6c70
數(shù)據(jù)格式需要與客戶公司數(shù)據(jù)庫中獲得的數(shù)據(jù)格式相匹配。
我們按區(qū)域細分該數(shù)據(jù),并創(chuàng)建兩個匯總表,包括格式和圖表,這些動作都不需要打開Excel!
數(shù)據(jù)可視化最終形式:從一個工作表到四個可視化報表
在這里,我們將使用Pandas和Openpyxl。如果你不知道Openpyxl,建議先找官方文檔進行學習。我們將使用Python自動化3個Excel任務!
# 第1部分-加載我們的庫import pandas as pdfrom openpyxl import load_workbookfrom openpyxl.styles import Fontfrom openpyxl.chart import BarChart, Reference
我們將使用兩個庫:
讓我們加載數(shù)據(jù)并快速查看我們正在使用的數(shù)據(jù)!
正如我所提到的,數(shù)據(jù)的含義類似于你從公司數(shù)據(jù)庫系統(tǒng)中獲得的數(shù)據(jù)。
#第2部分-加載我們的數(shù)據(jù)df = pd.read_excel('https://github.com/datagy/pivot_table_pandas/raw/master/sample_pivot.xlsx', parse_dates=['Date'])print(df.head())# Date Region Type Units Sales#0 2020-07-11 East Children's Clothing 18.0 306#1 2020-09-23 North Children's Clothing 14.0 448#2 2020-04-02 South Women's Clothing 17.0 425#3 2020-02-28 East Children's Clothing 26.0 832#4 2020-03-19 West Women's Clothing 3.0 33
在這里,我們使用pandas讀取一個Excel文件,將日期列解析為日期。
讓我們創(chuàng)建最終報告中需要的匯總表。
# 第3部分-測試數(shù)據(jù)透視表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())#季度銷售數(shù)據(jù)透視表:#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
有了透視表,現(xiàn)在我們將其加載到一個Excel文件中。
我們將使用pandas加載該Excel文?。?/p>
# 第04部分-創(chuàng)建和Excel工作簿file_path = #Path to where you want your file savedquarterly_sales.to_excel(file_path, sheet_name = 'Quarterly Sales', startrow=3)
讓我們快速了解一下我們在做什么:
Pandas有助于將數(shù)據(jù)轉(zhuǎn)換為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)
這段代碼里包含了很多內(nèi)容,下面來給大家詳細講解!
在第5部分中,我們將工作簿和工作表加載到Openpyxl可以處理的單獨對象中。
第6部分還有更多內(nèi)容:
在第7部分中,我們添加了條形圖:
這是我們的工作表現(xiàn)在的樣子:
我們的工作成果之一
只處理表格中的一部分不是我們高效工作的宗旨,讓我們對所有帶有for循環(huán)的區(qū)域執(zhí)行此操作。
# 第08部分-獲取地區(qū)名稱regions = list(df['Region'].unique())# 第09部分-所有區(qū)域的循環(huán)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部分中,我們創(chuàng)建一個列表,其中包含我們要覆蓋的不同區(qū)域的所有唯一值。
在第9部分中,我們在for循環(huán)中重復前面的代碼:
Python的好處在于可重復執(zhí)行任務的可伸縮性。
你可以想象一下,利用以上步驟,快速創(chuàng)建報表, 每天能節(jié)省多少時間?
在這個簡短的教程中我們學到了很多東西! 我們將表格轉(zhuǎn)換為一組數(shù)據(jù)透視表,將它們導出到單獨的工作簿中,然后將格式和圖形應用于每個工作表格!
聯(lián)系客服