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

2021-01-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學習與發展的乾貨

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

相關焦點

  • 如何用python在工作中「偷懶」?
    於是,我去了解了一下身邊不同崗位(HR、產品、運營、市場、數據分析師等)每天需要面對的重複性勞動(肯定會有不全,歡迎補充~),總結了一些在工作中非常常見的例子,並且將源碼整理好供參考。希望這些程序可以讓你的工作更高效!(升職加薪了別忘了回來發紅包哦~)那麼如何將這些統統實現呢?
  • 人生苦短,我用Python,那麼問題來了,普通人要學python嗎?
    話說在金融和IT行當混跡了多年,python一直是被我隨手拿來當個小工具用用,有時候偷懶用python弄個excel自動化整理工具,有時候拿來上各種網站爬蟲搜集點信息,有時候也會拿來寫點量化小工具。那麼到底什麼是python?
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    Mov 1-2在線編譯工具weblde使用之指南.mov 2-1如何在列表,字典,集合中根據條件.MOV 2-2 3 4命名 統計 字典.mov 2-5公共鍵.mov 2-6 如何讓字典保持有序.mov 2-7歷史記錄.mov 3-1 2迭代器.mov 3-3如何使用生成器函數實現迭代對象
  • 普通人學Python有意義嗎?學Python有前途嗎?-開課吧Python
    Pythonpython憑藉著第三方庫數量的龐大,其幾乎可以說是萬能的,對於普通人來說,數據表格excel基本上都有需要製作,而有一些編程基礎的,就可以使用庫openpyxl來實現excel表格的自動處理和生成,同時除了excel之外,針對word,ppt等python都有對應的庫。
  • python自動化測試實例—保險測試場景中的應用
    無論你有多好的等價類劃分,如果純手工測試的話工作量大,而且並不能構造所有的輸入數據,當然也就不能得到準確的測試結果。於是我想到了用python來生成大量的測試數據去測試接口,然後把測試結果數據保存到excel文檔中,最後只需要比對需求文檔上的保費數值和測試結果數據的值是不是一樣的就可以了。
  • 用一篇短文來告訴大家,學習Python都可以用來幹嘛
    python能做太多有趣的事了,看看我是怎麼玩的1.自動發郵件2.自動化操作excel3.定製酷炫二維碼4.下載視頻、MP35.爬蟲6.HTML\網頁自動生成PDF7.製作可視化圖表8.地理空間分析9.數據分析10連接資料庫11.機器學習如果你不知道如何學習python,入門困難,如果你想從事數據分析,學習分析技術,如果你想學習sql
  • Python利用openpyxl處理excel文件(openpyxl的安裝及簡介)
    作為一名苦逼的文員,經常同word、excel、ppt打交道,有些工作,比如事務性的,敲幾個文字,做幾個圖表,一般人都應該沒有啥問題,很輕鬆就會搞定。但是在同excel打交道過程中,你會面對一系列公式、紛繁的統計和複雜數據分析,比如這個公式:=IFERROR(TRIM(IF(LEN(VLOOKUP(F7,Sheet3!
  • 如何在Python中實現交互兩個數
    如何在Python中實現交互兩個數【原理】生活中我們要交互兩個杯中的水,小朋友們都知道我們需要再拿一個空杯子來倒換水,今天我們來探索一下python中如何實現交互兩個數【編程】首先我們需要輸入兩個數x=int(input("x="))
  • 懂Excel輕鬆入門Python數據分析包pandas(二十七):IF函數代替者
    後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandasnumpy.where 方法Excel 函數中有一個初學者都能馬上學會的函數——IF 函數,而在 pandas 中卻沒有對應效果的方法,這是因為 numpy 已經有了對應的實現—— where。他能根據條件(true 或者 false) 返回不同的值。
  • 編程界新晉「網紅」Python到底是什麼?學Python真的有用嗎?
    但我們仔細觀察這些步驟便可以發現這個任務總共就一個處理邏輯:對於文件夾中的每一個圖片,如果照片的拍攝時間順序等於表格裡的拍照順序,那麼就將圖片重命名為那一行拍攝順序表格中的(部門+姓名)信息。為什麼網上到處都在建議你學習python?列舉幾個理由吧:Python強大之處:(1)它背後有著最龐大的免費「代碼庫」,給初學者足夠的資源實現自己想要的功能。
  • excel宏:Excel表格中的宏怎麼使用
    今天來聊聊一篇關於excel宏:Excel表格中的宏怎麼使用的文章,現在就為大家來簡單介紹下excel宏:Excel表格中的宏怎麼使用,希望對各位小夥伴們有所幫助。
  • 如何開始寫你的第一個python腳本——簡單爬蟲入門!
    初期,我們抓到需要的內容後,只需要保存到本地,無非保存到文檔、表格(excel)等等幾個方法,這裡大家只需要掌握with語句就基本可以保證需求了。大概是這樣的:with open(路徑以及文件名,保存模式) as f:f.write(數據)#如果是文本可直接寫入,如果是其他文件,數據為二進位模式更好當然保存到excel表格或者word文檔需要用到 xlwt庫(excel)、python-docx庫(word),這個在網上很多,大家可以自行去學習。
  • 掌握這7條excel函數,自動化生成數據周報上篇
    那時我自己傻兮兮買一本excel函數和一本vba,後來幾次轉手也不知道送給誰了。現在真的不會有人讓你去提取身份證裡的出生年月日信息了,因為這是用戶隱私。網際網路團隊的數據分析運營最重要的是業務指標體系搭建和對業務邏輯的理解。學習的內容與實際契合才有價值。excel函數同樣遵循二八原則,掌握常用的函數,進行靈活組合可以解決80%以上問題。
  • 多年來Excel填報數據的各種不如意,終於現在用這個神器全部都解決了
    為了能夠解決這些麻煩,人們不斷的嘗試使用其他新的辦公軟體,希望能夠滿足自身在數據收集管理方面的需求,但是這些軟體自身又存在了其他的缺點,也不具備excel強大的計算能力,甚至還需要編程才能實現一些功能,導致不但解決不了原有的問題,甚至帶來了一些新的麻煩。那麼,到底有沒有一款軟體能真正解決excel填報數據過程中的各種問題呢?
  • 學習Python對辦公真的有用嗎?用經驗告訴你答案
    目前我在做兼職文案,以我的親身經歷為例,我可以很負責的告訴大家,學習python確實可以在某些方面提升你的工作效率,但是,並不是每個人都適合去學習它。去年9月份,我刷到朋友圈的python廣告,廣告語中宣傳的「高效、省時」很是吸引人。但是,促使我真正下定決心學python的,還是這些廣告中販賣的職場焦慮。
  • 職場excel如何用函數進行五星打分?大神一個公式就搞定!
    課程信息卡課程:《Excel天天訓練營》2.0圖文版章節:第2章-精通函數內容:五星打分(int\rept)在excel表格裡面,如果對一些打分的數據用星星字符來展示,老闆肯定看了更喜歡。比如:學生的成績表、員工的滿意度、產品的好評度等等。
  • 如何在Excel報表中自由轉換元萬元或億元
    如何在Excel報表中自由轉換元萬元或億元我們財務工作中很多報表數據要精準到角分,但管理層要求的一般是萬元,或者億元的數據報表,那麼怎麼處理更好呢?下面分享一個可以自由選擇轉換報表數據單位的辦法。假如我們的報表如下 :我們選擇「E2」單元格,選擇「數據」選項卡,選擇「數據工具」組件中,「數據有效性」或「驗證」按鈕,彈出「數據有效性」對話框,在有效性條件「允許」欄選擇「序列」,「來源」欄我們輸入「元,萬元,億元」,點擊「確定」按鈕。接下來,我們選定數據區域,選擇「開始」選項卡,「樣式」組件中「條件格式」按鈕,選擇 「新建格式規則」。
  • Python數據分析:pandas讀取和寫入數據
    02讀取寫入Excel文件python處理excel文件用到的模塊包含openpyxl、xlsxwriter、xlutils、xlrd、xlwt。想要了解更多關於這幾個處理excel文件的python包的詳情,可以訪問python-excel官網。
  • 在Excel中怎麼輸入『0』開頭的數字
    平時用excel只是看看報表,或是少用的朋友,可能就會遇到這個問題。在excel單元格輸入「001」這樣的數字後,繼續輸入其他數據時,前面兩個零卻消失了。這是為什麼呢?因為excel在你只輸入數字時,該單元格時默認常規格式,常規單元格格式不包含任何特殊的數字格式。那麼要顯示「0」開頭的數字,就要改變單元格格式。方法一:是將單元格格式設定為【文本】格式。在單元格單擊右鍵,菜單中選擇【設置單元格格式】,將【數字】面板分類改為【文本】確定即可。
  • 零代碼基礎,把報表做出科技感是什麼體驗?
    如何把各類型的報表,如財務報表、人力報表、庫存報表做的更好?我寫出了我自己的理解,這如果要放在知乎上,我相信肯定是最高贊回答。作為一個長期游離在IT和業務部門的小嘍囉,我被報表糾纏不清,每天早上我的郵箱都爆滿,各種決算報表、月銷售報表、生產周報......席捲而來。