python统计excel_Python操作excel做些统计

作为一名苦逼的打杂人员,经常要为N个部门做些统计工作,包括但不限于工作量统计、收入统计、服务质量统计。

数据格式集中在EXCEL,通常包含一个索引列,根据这个列获得一些属性数据,比如人员对应工作量等。

长长一串事务脚本通常太过ugly and dirty,Pandas有用牛刀杀鸡之嫌。

于是资深处女座精神洁癖发作,用xlrd搞了一个excel类,日常作些计数、求和、求平均的业务,还算得心应手。

PS:Xlrd新版支持.xlsx了,赞一个

直接上代码吧~

import xlrd

from collections import defaultdict, Counter

class ExcelData():

#指定excel文件位置以及索引列的名字

def __init__(self, xlsx_path, index_col=''):

workbook = xlrd.open_workbook(xlsx_path)

self.worksheet = workbook.sheet_by_index(0)

self.nrows = self.worksheet.nrows

self.ncols = self.worksheet.ncols

self.index_col = index_col

#近列名返回对应列的数据list

def get_col_by_name(self, col_name):

try:

index = self.worksheet.row_values(0).index(col_name)

except:

return None

# 返回列list,去除列名

return self.worksheet.col_values(index)[1:]

# 返回索引列及指定列的字典

def get_col_values(self, col_name):

index_col = self.get_col_by_name(self.index_col)

col = self.get_col_by_name(col_name)

return dict(zip(index_col, col))

# 指定列计数

def col_count(self, col_name):

col_values = self.get_col_by_name(col_name)

if not col_values:

r = None

else:

r = Counter(col_values)

return r

# 筛选列值按索引列计数

def index_col_count(self, col_name, filter=''):

c = defaultdict(int)

for i in range(self.nrows - 1):

if self.get_col_by_name(col_name)[i] == filter:

c[self.get_col_by_name(self.index_col)[i]] += 1

return c

# 指定列按索引列求和

def index_col_sum(self, col_name):

s = defaultdict(float)

for i in range(self.nrows - 1):

# 字典求和

s[self.get_col_by_name(self.index_col)[i]] += float(self.get_col_by_name(col_name)[i])

return s

# 指定列按索引列求平均

def index_col_avg(self, sum_dict):

a = defaultdict(float)

index_count = self.col_count(self.index_col)

for k, v in sum_dict.iteritems():

a[k] = v / index_count[k]

return a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值