发表文章

[最新] python:xlrd和xlwt处理excel数据

github37320188 3月前 3

版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/github_37320188/article/details/81637282

源数据表,是带有一行表头的excel表,数据部分正数、负数、小数都有,主要实现以下几项功能

1、读取数据,随后将数据分为表头,和数据两部分

2、将数据部分做成一个二维数组,源数据的每一列作为二维数组的一行

3、计算二维数组每一行的平均值,存进一个新的二维数组

4、将二维数组的每一行(除最后一行不需要)中为0的数用相应行的平均值替代,存进新的二维数组。对于源数据而言就是,将表格里的除最后一列以外的每一列中为0的数用该列的平均值替代。

5、将表头和最后的二维数组进行转置后按对应顺序写入excel

附录:

python 版本是3.6.4,不知道为什么无法写入xlsx文件,只能写入xls文件。还得继续探索

# _*_ coding: utf-8 _*_
import xlrd
import xlwt

# 返回二维数组
def list_list(sheet):
    sheet_col = sheet.ncols
    list = []
    for i in range(0, sheet_col):
        tmp = sheet.col_values(i)
        del tmp[0]
        list.append(tmp)
    # print(list)
    return list

def draw_aver(list):
    # print(len(list))
    one_list_len = len(list[0])
    list_aver = []
    for i in range(len(list)):
        list_aver.append(round(sum(list[i]) / one_list_len, 2))
    # print(list_aver)
    # print(len(list_aver))
    return list_aver

def replace_num(list, list_aver):
    for i in range(len(list)-1):
        for j in range(len(list[0])):
            if list[i][j] == 0.0:
                list[i][j] = list_aver[i]
    return list

def write_excel(sheet_title, list_new):
    f = xlwt.Workbook()
    sheet_new = f.add_sheet('res')
    for i in range(len(sheet_title)):
        sheet_new.write(0, i, sheet_title[i])
    for i in range(len(list_new)):
        for j in range(len(list_new[0])):
            sheet_new.write(j+1, i, list_new[i][j])
    f.save('res.xls')
    pass


if __name__ == '__main__':
    excel_file = xlrd.open_workbook('1443_15.xlsx')
    sheet = excel_file.sheet_by_index(0)

    # 表头
    sheet_title = sheet.row_values(0)
    # 数据表
    list = list_list(sheet)
    # 平均数集合
    list_aver = draw_aver(list)
    # 把所有为0的书替换为平均数
    list_new = replace_num(list, list_aver)
    # 把新的数据写会excel
    write_excel(sheet_title, list_new)
    pass
相关推荐
最新评论 (0)
返回
发表文章
github37320188
文章数
33
评论数
0
注册排名
714011