前言
工作中想對 excel 進行一個簡單的統計,歷時三個小時終於搞定,效果如下:
1. 源代碼
話不多說,直接上源碼,可以直接食用,只需將目標文件設置爲你需要統計的文件即可。
# -*- coding:utf-8 -*-
import xlrd
from collections import Counter
infos = []
# 目標文件
report = '2019.xlsx'
info_file = xlrd.open_workbook(report)
info_sheet = info_file.sheets()[1]
row_count = info_sheet.nrows
for row in range(0, row_count):
# 5 爲要統計的列序號,注意從 0 開始
infos.append(info_sheet.cell_value(row, 5))
def all_list(arr):
result = {}
for i in set(arr):
result[i] = arr.count(i)
return result
d = all_list(infos)
d2 = sorted(d.items(), key = lambda x:x[1], reverse = True)
print(d2)
2. 模塊解析
接下來對每個模塊進行解說。
2.1 文件打開
# 目標文件
report = '2019.xlsx'
info_file = xlrd.open_workbook(report)
info_sheet = info_file.sheets()[1]
第一步自然要打開文件,這裏需要引用 xlrd 庫。
第一行定義目標文件,第二行打開,第三行選擇表。注意:表的序號從 0 開始:
如圖,“Sheet1” 對應的是 info_sheet = info_file.sheets()[0]
,
而 “sheet2” 對應 info_sheet = info_file.sheets()[1]
。
2.2 數據讀取
infos = []
for row in range(0, row_count):
infos.append(info_sheet.cell_value(row, 5))
定義一個 list ,用來存儲讀取的數據。
然後以列數爲界限,利用 for 循環將每行你需要的列數據進行存儲。
2.3 頻率統計
def all_list(arr):
result = {}
for i in set(arr):
result[i] = arr.count(i)
return result
定義一個 dict ,將剛剛得到的 list 進行唯一處理, 然後將每個數據進行統計。這裏 dict 的 key - value 分別對應 “ 數據 - 頻率 ”。
2.4 按頻排序
d2 = sorted(d.items(), key = lambda x:x[1], reverse = True)
將剛剛得到的 dict 按照 value 值的大小進行倒序排序。
正序排序只需將代碼改爲:d2 = sorted(d.items(), key = lambda x:x[1], reverse = True)
。