码迷,mamicode.com
首页 > 编程语言 > 详细

【python操作Excel的常见方法汇总】 xlrd pandas xlwings

时间:2020-06-19 20:29:42      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:数据透视表   遍历   filename   迭代   算法思想   long   pen   下标   后台   

用python处理Excel数据,实现Excel的功能:分列、透视等功能

1. Excel 解压文件

#解压tar_path中的压缩文件到uzipPath
def unzip_archive(tar_path):
    print(#######解压文件夹,,tar_path)
    for i in os.listdir(tar_path):
        if i.endswith(zip):
            print(i)
            shutil.unpack_archive(tar_path + "/" + i,unzipPath)

2. Excel的基本打开读写、获取列

常见的Excel操作包括xlrd、pandas、xlwings,基本操作包括打开、读取、获取单元格值、写入等

xlrd

data = xlrd.open_workbook(i)  # 打开表
sheet = data.sheet_by_index(0)  # 按照index获取工作簿
sheet = data.sheet_by_name(sheet1)  # 按照工作簿名获取工作簿
nrows = sheet.nrows  # 获取行数
ncols = sheet.ncol   # 获取列数
row_value = sheet.row_values(i)
col_value = sheet.col_values(j)

用xlsxwriter写入到Excel

划重点:write_row(row,col,data) 用了enumerate自动匹配索引和迭代的值

#将alist写入tarfile的名为name的工作簿中
def insert_file(alist,tarfile,name=sheet1):
    print("####将透视表写入到",tarfile)
    wh = xlsxwriter.Workbook(tarfile)
    wadd = wh.add_worksheet(name)
    if len(alist) > 0 :
        for row_num,row_data in enumerate(alist):
            wadd.write_row(row_num,0,row_data)

补充:enumerate的用法

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标

代码是示意结果

https://www.runoob.com/python/python-func-enumerate.html

技术图片
alist = [[1,1-1],[2,2-2],[3,3-3]]
for row_num, row_data in enumerate(alist):
    print(row_num,row_data)
View Code

 

 

pandas

 

 

xlwings

xlwings的好处在于可以直接获得某列的指定位置的数据,缺点是 默认自动打开读取的文件,甚至关了运行程序后台还是显示这个文件是打开的……

设置visible之后 只是前段看不见,但是默认的还是会打开……

但是在获取数据上还是很方便的

import xlwings as xw
app = xw.App(visible=True, add_book=False)
wb = app.books.open(file) #打开file
sht = wb.sheets[0]
dateLong = sht.range(fH3:H{nrows}).value

 

3.数据透视表

    # 根绝tarfile生成数据透视表
    df = pd.read_excel(tarfile)
    pd.pivot_table(df,index=[u日期,u首次访问],values=[u手机,u会话效果],aggfunc=[np.count_nonzero,np.count_nonzero])

参考链接:https://www.cnblogs.com/Yanjy-OnlyOne/p/11195621.html

但是这种方法写出的透视表数据不美观,后续需要调整,所以自己写了个计数算法

算法思想是:空为0非空为1,计算

    lista = [[0 if temp==‘‘ else 1 for temp in list] for list in a]
    for i in range(len(a)):
        kl = a[i][:2]
        if type(kl[0]) == float or type(kl[0]) == int:
            kl[0] = getdate(kl[0])  # 从数字型日期转为字符串型日期

        key = (kl[0], kl[1]) #前两列作为做透视的key
        val = lista[i][2:] #h后两列是值
        if key not in dicta.keys():
            dicta[key] = val
        else:
            raw = dicta[key]
            dicta[key] = [raw[i] + val[i] for i in range(len(raw))]
    result = [list(key) + dicta[key] for key in dicta.keys()]

 

4. 获取文件内的所有文件

def get_filename(tar_path):
    for root,dirs,files in os.walk(tar_path):
        for i in files:
            if i.endswith(xls) or i.endswith(xlsx):
                print(i)
                dir.append(tar_path + "/" + i)
    print(#####解压后的Excel文件,dir)
    return dir

 这里深入了解了os的几个常用函数,包括获取指定目录下的文件、

技术图片
#获取指定目录下的文件夹或文件的名字列表
a = os.listdir(path)
print(a)

# 打开文件
f = os.open("",os.O_RDWR|os.O_CREAT)
os.write(f,"this is test")

#重命名
os.rename(src,dst)
os.renames(old,new) #递归地更名
#删除
os.remove(path)
os.removedirs(path) #删除递归目录
#遍历目录
os.walk()
View Code

 

【python操作Excel的常见方法汇总】 xlrd pandas xlwings

标签:数据透视表   遍历   filename   迭代   算法思想   long   pen   下标   后台   

原文地址:https://www.cnblogs.com/mindReader007/p/13164648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!