Python利用openpyxl處理Excel文件(實戰項目—人口統計)

2020-12-13 python高手養成

之前,學習了兩章關於openpyxl的基礎知識,通過這些還不能了解openpyxl的強大作用。今天,帶領大家通過一個實戰項目認識openpyxl的強大之處,項目來自《Python編程快速上手—讓繁瑣工作自動化》一書,並對書中的例子進行了些許改動和擴充,本文旨在提供一種通過openpyxl處理大量Excel數據並進行數據統計的方法。項目數據來自網站(http://nostarch.com/automatestuff/),讀者可以自行下載。

一、實例

有一個Excel電子表格,表格內的數據統計了20XX年某國人口普查數據,表格有四列,分別是普查區(一個地理區域,為人口普查而定義)區域編碼、該區域所屬州的簡稱、該區域所屬縣的名稱、該區域的人口數量,表格中每一行表示一個人口普查區。現在要求統計該年度該國家的總人口、每個縣的人口以及每個縣裡面包含的普查區的個數,並把這些內容寫入工作簿的另一個工作表中。表格一共有7萬多行數據。數據表結構如下圖所示。

待處理的Excel表結構

二、實例分析

該實例通過Excel篩選功能或者公式解決,對於一個熟練操作Excel的苦逼文員,可能需要1到n個小時來解決該問題,通過Excel公式解決該問題也較為繁瑣。但是,如果我們利用openpyxl來統計該數據的話,只需要幾秒鐘就可以搞定了。下面我們分析解決問題的幾個重點環節……

(一)需要打開該Excel文件並定位到具體的工作表,使用openpyxl.load_Workbook()、ws.get_sheet_by_name()函數;

(二)確定返回統計信息的數據結構,這裡我們使用Python中的字典類型,popResult = {}。首先分析,每個縣裡面我們需要統計兩個參數:」普查區數量」和「縣的總人口」,於是,得到每個縣的數據結構為:「縣名稱」:{「普查區數量」:n,」人口」:m},每個州裡面有n多個縣,我們最後統計的字典結構應該是這樣的:popResult = {「州名稱」:{「縣名稱」:{「普查區數量」:n,」縣人口數」:m},……},……}。如果能理清這個數據結構,基本就算完成了一半任務。

(三)利用for循環遍歷每一行數據,將每一行數據統計到popResult字典中;

(四)按照相關要求將結果寫入本地Excel文件中。這一過程有個難點,就是如果直接遍歷字典的話,字典結構比較複雜,會嵌套多個for循環,使得程序可讀性變差,因此,我們將插入表格的每一行數據變成一個列表,然後循環遍歷,通過列表的形式比較方便插入。所以,這一步我們轉變了一次數據結構,使得問題得以方便解決。

三、編程解決問題

廢話不說,直接上代碼。

import openpyxl

popResult = {}

resultList = []

listItem = []

wb = openpyxl.load_workbook("population.xlsx")

# 只有一張表,用這種方式直接獲取

ws = wb.active

# range()計算邊界不含右邊界,所以加1

for row in range(2, ws.max_row + 1):

city = ws['B' + str(row)].value

country = ws["C" + str(row)].value

population = ws["D" + str(row)].value

# 此處避免出現異常,因此使用setdefault

popResult.setdefault(city, {})

popResult[city].setdefault(country, {"area":0,"population":0})

# 統計區域數量和人口數量

popResult[city][country]["area"] += 1

popResult[city][country]["population"] += population

# for循環將得到的字典popResult轉化為列表形式resultList,便於遍歷寫入countSheet表中

for city, country_info in popResult.items():

for country, info in country_info.items():

listItem.append(city)

listItem.append(country)

listItem.append(info['area'])

listItem.append(info["population"])

resultList.append(listItem)

# 置空便於下次循環

listItem = []

# 獲得寫入表countSheet的行數

numberRow = 0

for key, value in popResult.items():

numberRow += len(value)

print(numberRow)

# 然後將popResult寫入另一個表中

countSheet = wb.create_sheet(index=1, title="統計結果")

# 直接將表頭寫入工作表

countSheet['A1'].value = "市"

countSheet['B1'].value = "縣"

countSheet['C1'].value = "區域數量"

countSheet['D1'].value = "人口數量"

# 得到result_list

for row in range(2, numberRow + 1):

# 表格從第二行開始插入,而列表從index=0開始循環

countSheet['A' + str(row)] = resultList[row-2][0]

countSheet['B' + str(row)] = resultList[row-2][1]

countSheet['C' + str(row)] = resultList[row-2][2]

countSheet['D' + str(row)] = resultList[row-2][3]

# 保存修改,沒有這一步countSheet表沒有保存

wb.save("population.xlsx")

最終結果應該是這樣的。

最終結果展示

四、結果展望

一是不一定要將字典類型的數據結構轉化為列表類型,如果數據量過大,這種轉化既浪費時間,又可能得不到結果(死機啦),所以直接遍歷字典或者引入yield也是不錯的辦法,我們將在以後探討這個問題;

二是該程序提供了利用openpyxl進行Excel數據統計的一般方法。難點在於,如何構造一種或多種數據結構作為中介,來傳遞數據。

三是數據統計表中對於相同的市的單元格可以通過程序直接進行合併,這在以後的學習中再進行探討。

可愛的python

未完待續!

相關焦點

  • Python利用openpyxl處理excel文件(openpyxl的安裝及簡介)
    但是試想,如果把上述excel公式變成諸如python中的if-else結構,其可讀性肯定是不容置疑的……今天,我們來介紹一款excel處理利器—openpyxl(python庫文件)。對於openpyxl我們計劃分七個專題進行討論,每一個專題我們提供一到兩個例子或實戰項目,便於理解和應用,並結合應用過程對每一知識點的實戰價值進行回顧和講解。一、學習目標(一)openpyxl的安裝。
  • Python利用openpyxl處理Excel文件(單元格樣式設置)
    前面幾個章節,簡單介紹了openpyxl模塊及使用該模塊對Excel文件進行簡單操作,並通過一個實戰項目(人口數據統計)展示了使用openpyxl模塊處理Excel文件的優勢。今天,我們主要梳理通過openpyxl如何對Excel文件的單元格樣式進行編輯。
  • Python利用openpyxl處理Excel文件(公式實例)
    前面我們學習了Python使用openpyxl模塊處理Excel文件的大部分內容,今天,我們通過一個例子來學習Python使用Excel公式的方法,引出今天的主題利用openpyxl處理Excel公式。
  • Python利用openpyxl處理Excel文件(Excel文件基本操作)
    上一篇,我們簡要介紹了openpyxl及其安裝過程,這一篇我們學習使用openpyxl處理Excel的具體過程,力爭涵蓋大多數官方文檔中相關內容,對這一知識點進行簡單的匯總。一、學習目標(一)openpyxl的具體使用。
  • Python利用openpyxl處理Excel文件(單元格及行列具體操作)
    通過實戰項目演示,進一步加深了印象,整個過程我們不難發現,對於使用openpyxl操作Excel文件,行列遍歷及單元格的定位操作是整個過程的重要技巧和先決條件,因此,這節我們著重講解openpyxl對於單元格及行列遍歷的具體操作。
  • 詳解Python操作Excel文件
    前言本篇文章主要總結了一下利用python操作Excel文件的第三方庫和方法。常見庫簡介1.xlrdxlrd是一個從Excel文件讀取數據和格式化信息的庫,支持.xls以及.xlsx文件。地址:http://docs.xlwings.org/en/stable/index.html4、強大的轉換器可以處理大部分數據類型,包括在兩個方向上的numpy array和pandas DataFrame。5.openpyxlopenpyxl是一個用於讀取和編寫Excel 2010 xlsx/xlsm/xltx/xltm文件的庫。
  • Python處理excel的強大工具-openpyxl
    的操作,下面簡單介紹下,如何使用Python的openpyxl庫處理excel文檔。首先,Python處理excel的第三方庫有:xlrd,xlwt,openpyxl等。其中xlrd只能讀excel,xlwt只能寫excel,所以今天我們就重點了解一下openpyxl,它既可以讀寫數據,還能操作工作表,比如生成柱狀圖等。
  • Python之unittest+ddt+openpyxl綜合
    前面寫過python之unittest初探和python之unittest+ddt兩篇文章。(往期公眾號文章)在之前的文章中,寫過可以再次優化。今天寫第三篇的目的,就是在原有基礎上,基於openpyxl模塊再次優化。在第二篇中,注意到測試數據與代碼寫在一起,實在是難以維護操作。
  • 氣象編程 | 使用python操作Excel文件
    python操作Excel的庫有很多,大概有xlrd、xlwt、openpyxl、XlsxWriter、xlutils、pandas等。這些庫的操作對xls和xlsx的支持不同,有個只可以操作xls,有的只可以進行讀操作。我選用的庫是openpyxl,支持對xlsx的讀寫操作。
  • 實戰代碼 | Python自動化辦公 - 對Excel表格的操作(openpyxl的基本使用)
    環境,在pycharm裡安裝相應的第三方文件庫,黏貼代碼即可運行,我會儘量在代碼後面都進行標註解讀。需要python教學視頻和資料的在公眾號菜單欄獲取,有任何問題歡迎公眾號後臺聯繫我或加我微信。python安裝教程註:import後導入的模塊需要單獨安裝,有些是自帶的,但是要實現更複雜的功能一般是安裝第三方模塊。安裝方法:1.win+r,調出命令提示窗口,輸入cmd再按回車鍵。
  • Python「文件操作」Excel篇(上)
    大家好,我們今天來一起探索一下用Python怎麼操作Excel文件。與word文件的操作庫python-docx類似,Python也有專門的庫為Excel文件的操作提供支持,這些庫包括xlrd、xlwt、xlutils、openpyxl、xlsxwriter幾種,其中我最喜歡用的是openpyxl,這也是本次講解的主要內容。Excel文件大家也不陌生了,平時辦公、學習中都會用到,大家回憶一下,你操作一個Excel文件是什麼步驟呢?
  • Python利用openpyxl來操作Excel(一)
    最近一直在做項目裡的自動化的工作,為了是從繁瑣重複的勞動中掙脫出來,把精力用在數據分析上。自動化方面python是在好不過了,不過既然要提交報表,就不免要美觀什麼的。pandas雖然很強大,但是無法對Excel完全操作,現學vba有點來不及。
  • 利用pandas讀取格式不規範的Excel文件
    介紹pandas 很容易將Excel文件讀取為DataFrame,但是在現實中,Excel文件裡面的數據格式往往是不規範的
  • 14-用Python 讀寫 Excel 文件
    和R這樣的分析工具了XlsxWriterxlrd&xlwt[2]OpenPyXL[3]Microsoft Excel API[4]介紹可以創建 Excel 2007 或更高版本的 XLSX 文件即 python-excel,含 xlrd、xlwt 和 xlutils 三大模塊,分別提供讀、寫和其他功能可以讀寫 Excel 2007 XLSX 和 XLSM 文件直接通過 COM
  • python操作excel文件一站式搞定
    1,相關模塊介紹2,查看是否已經安裝相關模塊3,安裝相關模塊4,會查看當前目錄5,會在excel中正確寫入文件路徑6,操作Excel中的三大對象(book,sheet,cell)1,相關模塊介紹xlrd庫:從Excel中讀取數據,支持xls、xlsx,前2個字母表示excel文件
  • 如何使用Python批量化處理Excel——零基礎入門指南
    Python也是這樣的,它已經有了非常強大和完備的函數庫,我們只需要調用函數,然後修改參數,就可以用Python來處理我們自己的表格,它與Excel的區別無非就是沒有可視化圖形界面而已,你選不中單元格,沒有各種菜單選項給你點,你只能手動敲擊文本,但當你學習明白函數、參數、返回值、變量等概念,你就能像使用excel那樣使用命令行來進行python編程,並驚嘆於其強大。
  • 放棄Excel,學習Python的理由,1個案例領略Python處理表格的魅力
    前面內容,我們講了一些關於Python處理Excel文件的案例。Excel表格處理老司機教你:使用Python處理電子表格公式的正確姿勢真實案例引發的思考,如何分組統計電子表格數據,Python輕鬆搞定Excel表格搬到Python界面上?可以實現!
  • 用Python讀取Excel文件指南
    原作者丨Erik Marsja本文將重點闡述用Python如何讀取Excel文件(xlsx),重點是演示使用openpyxl模塊讀取xlsx類型的文件。首先,我們要看一些簡單的示例;然後,我們將學習讀取多個Excel文件。
  • n種方式教你用python讀寫excel等數據文件
    點擊上方「濤哥聊Python」,選擇「星標」公眾號重磅乾貨,第一時間送達來源:Python大數據分析python處理數據文件的途徑有很多種,可以操作的文件類型主要包括文本文件(csv、txt、json等)、excel
  • Python 數據處理(十九)—— Excel
    Python 數據處理(十九)Excel 文件read_excel() 方法可以使用 openpyxl 模塊讀取 Excel 2007+(.xlsx)文件可以使用 xlrd 讀取 Excel 2003(.xls)文件。