從Excel中解救你!如何用Python實現報表自動化

2020-12-11 讀芯術

全文共2391字,預計學習時長14分鐘

圖源:morioh

工作中,無窮無盡的表格有時會令人抓狂。Excel無處不在,即便有著像Python這樣的強大工具任你使用,你也難以從中逃脫。

也許你的老闆和同事仍然需要這種簡單的方法來訪問重要數據。但沒關係!那並不意味著你不能通過使用Python來簡化Excel工作。

全程無需使用Excel,逃離報表魔爪!

用Python將Excel報表自動化

你還在天天做Excel報表嗎?而且還是為不同的客戶做著四五次同樣的報表嗎?不如讓Python代勞吧!

通過使用筆者在數據透視表教程中的數據(https://towardsdatascience.com/a-step-by-step-guide-to-pandas-pivot-tables-e0641d0c6c70),概覽一下我們將要自動化到底是什麼。

數據格式將使你期望從公司資料庫中獲得的內容與客戶銷售數據相匹配,與你期望從公司資料庫中獲得的數據相匹配。它按區域細分這些數據,並且創建兩個帶有格式和圖表的匯總表。無需使用Excel!

最終的數據流—一個工作簿轉化為四個格式化報告 | 圖源:Nik Piepenbreier

加載庫

使用Pandas和Openpyxl。筆者的「用Python自動化這三項(無聊!!!)Excel任務」( https://towardsdatascience.com/automate-these-3-boring-excel-tasks-with-python-666b4ded101b)一文中涵蓋了許多關於Openpyxl的內容,對其如何運行提供了詳細介紹。

#Section 1 - Loading our Libraries

import pandas as pd

fromopenpyxl import load_workbook

from openpyxl.styles importFont

from openpyxl.chart importBarChart, Reference

你使用如下兩個Librariy:

1. Pandas負責轉化數據,並創建初始Excel文件

2. Openpyxl將工作薄格式化,並插入圖表

加載數據

加載數據,並概覽正在處理的內容。正如筆者所提到的,這些數據與讀者從公司資料庫系統獲得的數據相似。

#Section 2 - Loading our Data

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文件,並讀取Date/日期列的日期。

創建數據透視表

接著我們要創建最終報告中所需要的匯總表。這裡將創建一個數據透視表以作為例子,其中僅使用東部地區進行代碼的實驗。

#Section 3 - Testing Pivot Tables

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())

#Quarterly Sales Pivot Table:

#Type Children's Clothing Men'sClothing Women's Clothing

#Date

#1 12274 13293 16729

#2 5496 17817 22384

#3 14463 9622 15065

#4 13616 10953 16051

創建第一個Excel文件

有了數據透視表後,將其導入到一個Excel文件中,我們將用pandas來導入:

#Section 04 - Creating and Excel Workbook

file_path=#Path to where you want your file saved

quarterly_sales.to_excel(file_path, sheet_name ='Quarterly Sales', startrow=3)

這一步是在做什麼:

· 創建一個文件路徑變量,以確定要將文件存儲在何處,

· 使用ExcelWriter保存文件

· 將兩個透視表保存到單獨的工作表中,從第3行開始(稍後從中保留以用於頁眉)

使報表更漂亮

Pandas有助於將數據導入到Excel中。既然數據已經導入Excel,不妨將其美化一下,來添加一些可視化效果。

#Section 05 - Loading the Workbook

wb =load_workbook(file_path)

sheet1= wb['Quarterly Sales']

# Section 06 - Formatting the First Sheet

sheet1['A1'] ='Quarterly Sales'

sheet1['A2'] ='datagy.io'

sheet1['A4'] ='Quarter'

sheet1['A1'].style ='Title'

sheet1['A2'].style ='Headline 2'

for i inrange(5, 9):

sheet1[f'B{i}'].style='Currency'

sheet1[f'C{i}'].style='Currency'

sheet1[f'D{i}'].style='Currency'

# Section 07 - Adding a Bar Chart

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

wb.save(filename = file_path)

在Section 5中,將工作簿和工作表加載到Openpyxl可以處理的單獨對象中。

而Section 6中操作更多:

· 在表一的A1和A2單元格中添加標題和副標題。

· 更改「quarters」列的標題,使其更能反映數據。

· 對標題和副標題應用樣式。

· 將金融領域的單元格轉換為貨幣。這需要對每單個單元格進行單獨處理。因此使用了for循環。

在Section 7中,添加了條形圖:

· 創建一個條形圖對象,並識別存儲數據和類別的欄位。

· 隨後將數據和類別應用於對象。

· 最後,添加描述性標題和樣式。使用許多不同的樣式都試試!

這就是工作簿現在的樣子:

所得工作簿之一 | 圖源: Nik Piepenbreier

對多個工作簿執行工作流自動化

雖然已經很方便了,但是僅在一個區域執行這樣的操作只能節約一點點的時間。我們可使用for循環,對所有的區域執行此操作。

#Section 08 - Getting Region Names

regions =list(df['Region'].unique())

# Section 09 - Looping Over All Regions

folder_path=#Insert the path to the folder you want tosave the reports in

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 ='QuarterlySales', 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 inrange(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

在Section 8中,創建了一個列表,其中包含了想要覆蓋的不同區域的所有唯一值。

在Section 9中,在for循環中重複先前的代碼:

· 創建一個新變量,該變量用於保存文件所在文件夾的路徑

· 接下來,使用f-strings將區域名插入到腳本中,使得腳本對每個區域都是動態的。

圖源:unsplash

Python的好處在於,它可使重複的任務具有可伸縮性。

想像一下,如果你每天都會收到這份文件,並且每天都要創建這些工作簿。這種方法能幫你節省多少時間!

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 擺脫了Excel重複做表,換個工具輕鬆實現報表自動化,漲薪三倍
    先理解一下什麼是自動化,比方說以前我們造路鋪磚都是用人工一塊一塊的鋪上去,而現在都是用機器自動撿磚、鋪磚,不需要人力勞動了,這就是自動化。報表自動化,顧名思義就是人不用做表,表格自動生成。就拿日報、季報來說,每天、每月的數據都需要更新,日報、月報就要重複做,如果可以通過工具或代碼自動生成周報、日報,不需要人反覆做表,這就是報表自動化。
  • 講一講我是如何通過Python實現辦公自動化的
    我們需要學習的主要內容有:python基礎;excel自動化;ppt自動化;word自動化。excel自動化office家族其實都可以用VBA解決自動化的問題,但可能很多人不會用。python針對excel有很多的第三方庫可以用,比如xlwings、xlsxwriter、xlrd、xlwt、pandas、xlsxwriter、win32com、xlutils等等。
  • Python自動化用這些知識點就夠了!
    這可能是很多非IT職場人士面臨的困惑,想把python用到工作中,卻不知如何下手?python在自動化辦公領域越來越受歡迎,批量處理簡直是加班族的福音。excel自動化office家族其實都可以用VBA解決自動化的問題,但可能很多人不會用。python針對excel有很多的第三方庫可以用,比如xlwings、xlsxwriter、xlrd、xlwt、pandas、xlsxwriter、win32com、xlutils等等。
  • 如何用python實現excel中的vlookup功能?
    具體做的是什麼,暫時先賣個關子,請大家持續關注,後面你就知道了。因為刀哥是python初學者,對於需要用到的知識點,如果以前學過的要再複習一下,年紀大了嘛記性比較差,沒學過的新知識點要先學習一下,邊學邊用,所以做的速度比較慢,但是好在,哪怕慢,只要每天進步一點點,都是好的。
  • 學會Python+Selenium,分分鐘搭建Web自動化框架!
    用python+selenium實現UI自動化測試,要有一些HTML和xpth的基礎,當然python基礎一定是必須要會的。筆者建議花點時間了解下相關基礎知識,不至於後面發懵。一、什麼是selenium?selenium是個強大的工具集。
  • selenium自動化利用excel文件實現批量傳值
    selenium自動化測試的時候,經常會用到數據來做批量測試,常用的方式有讀取txt文件,xml文件,csv文件以及excel文件幾種,本文給大家講解一下在selenium 中如何利用excel文件實現批量傳值,python讀取excel主要用到xlrd庫,此庫可在pycharm手動下載此類庫
  • 未明學院:用excel不好嗎?為什麼還要學python?
    在大數據背景的今天,面對千萬條以上動輒成百上千G的數據,單用excel難免顯得力不從心,越來越多的人將關注點轉向python。1、易踩坑!而python在數據處理的量級和性能上明顯高於excel,對python來說,只需調用drop_duplicates方法就可以輕鬆處理大批量數據,無需擔心軟體崩潰異常退出。
  • 做報表三年卻被淘汰:別學python和Excel,這才是你該會的工具
    其實不僅僅是財務,就連我這種做BI的,都曾經或多或少有這樣的困惑,感覺很乏力:一個表內有快20個子表,一下子發十幾個這樣的表給你,一天都在不停的看和做,到頭來領導還說你做的不行。總結下來就是各種excel表的集大成者,常常就是「大表套小表、小表還有表外表」地做報表。
  • 還在用 EXCEL複製粘貼?報表自動化讓你效率提升10倍
    作為一名普通的數據統計員,相信你一定擺脫不了這樣的場景:1、公司裡存在著各種日報、周報和月報,由於不會用EXCEL做報表自動化,你經常需要花大量時間把公司裡幾十個門店的數據匯總起來再製作表格;2、公司要開年度經營分析會議,領導要求你把公司整年的數據提取出來進行分析,但是由於數據量太大
  • 一個模版讓報表自動生成,領導:這才是數據分析人該幹的事
    答案是:交給自動化報表來做。Excel半自動化報表簡單而機械的任務不適合人工手動完成但卻很適合機器自動完成,即便你目前除了Excel外一無所有,至少也可以通過搭建半自動Excel模板的方式將所有的查數據需求整合成一張數據報表,這種報表僅需要通過複製粘貼的方式將數據源輸入模板,之後的數據處理和展現都能自動完成。
  • Python自動化辦公(內容)
    python自動化辦公(python操作Excel、Word、PDF、PPT)python使用openpyxl操作excel;python使用PyPDF2和pdfplumber操作pdf;python使用python-docx操作word;python使用python-pptx操作PPT;python如何自動收發郵件;python製作電話號碼歸屬地查詢工具;一:python
  • 14-用Python 讀寫 Excel 文件
    >數據量很小,或者願意等待僅在 Windows 中使用XlsxWriter[9]Xlsx是python用來構造xlsx文件的模塊,可以向excel2007+中寫text,numbers,formulas 公式以及hyperlinks超連結。
  • 如何使用Python批量化處理Excel——零基礎入門指南
    Python也是這樣的,它已經有了非常強大和完備的函數庫,我們只需要調用函數,然後修改參數,就可以用Python來處理我們自己的表格,它與Excel的區別無非就是沒有可視化圖形界面而已,你選不中單元格,沒有各種菜單選項給你點,你只能手動敲擊文本,但當你學習明白函數、參數、返回值、變量等概念,你就能像使用excel那樣使用命令行來進行python編程,並驚嘆於其強大。
  • 巧用python win32com模塊操作excel文件
    可openPyxl也有不足,它難以實習VBA中的很多功能。如果我們平日裡對VBA語法很熟悉,則可以通過win32com.client來操縱excel文件,語法非常類似。  之所以不直接使用VBA,是因為VBA擅長跟excel打交道,不擅長跟外部應用打交道。
  • 如何用Python輕鬆搞定Excel日常任務
    本文將告訴你,這三項Excel日常任務,如何用Python輕鬆搞定。首先導入Pandas並根據工作簿中可用的工作表加載兩個dataframe,稱它們為sales和states。import pandas as pdsales = pd.read_excel('https://github.com/datagy/mediumdata/raw/master/pythonexcel.xlsx', sheet_name ='sales')states = pd.read_excel
  • PDF轉EXCEL,python的這個技能知道嗎?
    當在pdf上看到自己想用的表格,卻無法將其複製下來的時候,只能默默地打開excel對照著pdf表格的形式敲打出來,既費時又費力!這裡介紹如何用python程序將pdf上的表格自動轉化為excel表!python辦公自動化——PDF轉Word所使用的pdfminer庫類似,都是從pdf裡面提取信息。
  • python+xlrd+xlwt操作excel
    小強python全棧自動化測試培訓班招生中,預計開課時間為18年3月份在2017年10月之前報名並繳納全部費用的童鞋優惠
  • 一鍵生成報表模板的神器來了
    想要同時實現這兩個功能,報表高手一般用的是python+Excel宏,但是寫代碼的難度太大,一般人根本上手不了,也沒必要花精力去學;對於普通的報表人,一款既簡單方便又能實現一鍵模板生成、並能定時發布的報表工具簡直就如同救星一般,能夠最大化減少自己重複的報表工作時間。你還別說,這樣的神器還真的有,那就是我今天要說的——FineReport。
  • Python辦公自動化| word 表格轉excel
    之前寫過一篇 Python辦公自動化 | 批量word報告生成工具 ,有小夥伴提出了逆向需求,即:從批量word中獲取內容並寫入excel,需求背景是匯總一些材料,舉例:實習鑑定表、個人簡歷、檔案等。實際需求是這樣的,現在有如下格式的若干word文檔,需要錄入標黃信息到excel,手工錄入效率太低了,能不能用python實現呢?
  • 技術中臺之DevOps自動化測試實踐
    Devops作為技術中臺的重要組成部分之一,其下「自動化測試」功能也是不可或缺的一環,如何結合DevOps自身提供的自動化測試功能,做好DevOps的接口自動化呢?首先要先了解DevOps為自動化測試提供了哪些功能,如何使用該功能進行自動化測試,以及如何設計測試框架等等,本文將會為大家一一解答。