前言
工作中想对 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)
。