精华内容
下载资源
问答
  • 前几天因为业务需求,要在python里面给excel排序,然后在网上找的方法是这样的 排序使用方法: 1、选择需要排序的区域。这里用 ‘a2’ 是因为排序的数据送从第二行开始的,第一行是标题,不应该参与排序。 2、选择按...

    python操作Excel,xlwings排序。

    前几天因为业务需求,要在python里面给excel排序,然后在网上找的方法是这样的

    排序使用方法:
    1、选择需要排序的区域。这里用 ‘a2’ 是因为排序的数据送从第二行开始的,第一行是标题,不应该参与排序。
    2、选择按那一列进行排序 Key1=sht.range(‘c2’).api, 这里选择的是按 第 C 列排序,所以这里选择 c1 和 c2 都可以。
    3、Order1=1 为升序,2为降序。

    sht1.range(‘a2’,(rows,columns)).api.Sort(Key1=sht.range(‘c2’).api, Order1=1)
    详细请看:xlwings最全操作;10秒搞定Xlwings全套操作

    使用之后发现排序的时候都是行排序,不是列排序,一直在网上查也没查到,最后是一个大神告诉我的,只要在后面加上Orientation=1 就可以了,即
    sht1.range('a2',(rows,columns)).api.Sort(Key1=sht.range('c2').api, Order1=1,Orientation=1)

    果然好了,今天把这个写出来,给需要的人。

    展开全文
  • python读写excel

    2016-08-24 13:53:31
    写的一个帮同事处理excel的小程序,需要把一个总表按照店铺名称拆开成7个表。各个商铺表中商品编号中开头是8的需要去掉8,开头是DS的不用管...程序涉及到pythonexcel的读写操作,将对象按照某个属性排序,以及具有相

    写的一个帮同事处理excel的小程序,需要把一个总表按照店铺名称拆开成7个表。各个商铺表中商品编号中开头是8的需要去掉8,开头是DS的不用管,开头是其他数字的也不用管。然后将商品编号相同的合并起来(卖给顾客同种商品也许优惠程度合出售价格不同,所以同种商品可能有多行),相同编号的商品只保留一行,每行对应的结算价格和售出数量是该店铺所有同编号商品的总和,求出平均价格。如果该店铺的商品列表行数超过500,就再建一个新的excel表。

    程序涉及到python对excel的读写操作,将对象按照某个属性排序,以及具有相同属性的对象的合并等。

    <pre name="code" class="python">import xlrd
    import xlwt
    import math
    import operator
    
    class store:
        def __init__(self,name,goodsnum,final,salnum):
            self.name=name
            self.goodsnum=goodsnum
            self.final=final
            self.salnum=salnum
    
    wbs = [xlwt.Workbook()] * 10
    sheetWrites = [xlwt.Workbook().add_sheet("sheet")] * 10
    
    workbook=xlrd.open_workbook("F:/excel/tmpdb.xls")
    sheets=workbook.sheet_names();
    worksheet=workbook.sheet_by_name(sheets[0])
    
    global t
    t=0
    
    shops = [1]*worksheet.nrows
    shopds=[]
    
    listt=[]
    listj=[]
    listr=[]
    listy=[]
    listc=[]
    listbc=[]
    listg=[]
    listtd=[]
    listjd=[]
    listrd=[]
    listyd=[]
    listcd=[]
    listbcd=[]
    listgd=[]
    
    def addsame(list):#将一个店铺中商品编号相同的商品汇总起来的方法
        a=0#记录初次出现的下标
        for i in range(0,len(list)):
            if a==i==0:
                list[a].final = list[i].final
                list[a].salnum = list[i].salnum
                #print(listt[i].goodsnum,"\t",listt[i].final,'\t',listt[i].salnum)
            else:
                if list[i].goodsnum == list[i-1].goodsnum:
                    list[a].final=list[a].final+list[i].final
                    list[a].salnum=list[a].salnum+list[i].salnum
                    list[i].final=0
                    list[i].salnum=0
                else:
                    a = i
    
    def sheet_Shops(sheetname,wbname,listname,path):#写入excel的方法
        global t
        t=0
        for obj in listname:
            if obj.salnum>0:
                obj.final=("%.2f" % obj.final)
                sheetname.write(t, 0, obj.name)
                sheetname.write(t, 1, obj.goodsnum)
                sheetname.write(t, 2, obj.final)
                sheetname.write(t, 3, obj.salnum)
                price=float(obj.final)/float(obj.salnum)
                sheetname.write(t, 4, "%.2f" % price)
                t = t + 1
                wbname.save(path)
            else:
                pass
    
    def sheet_ShopDs(sheetname,wbname,listname,path):#商品号带DS写入excel的方法
        global t
        for obj in listname:
            if obj.salnum>0:
                obj.final=("%.2f" % obj.final)
                sheetname.write(t, 0, obj.name)
                sheetname.write(t, 1, 'DS'+str(obj.goodsnum))
                sheetname.write(t, 2, obj.final)
                sheetname.write(t, 3, obj.salnum)
                price = float(obj.final) / float(obj.salnum)
                sheetname.write(t, 4, "%.2f" % price)
                t = t + 1
                wbname.save(path)
            else:
                pass
    def readexcel():
        global shops
        global shopds
        for i in range(0,worksheet.nrows):#读取出excel表格中所有的数据
            row=worksheet.row(i)
            shops[i]= store(worksheet.cell_value(i, 0), worksheet.cell_value(i, 3), worksheet.cell_value(i, 8),
                            worksheet.cell_value(i, 9))
            if "DS" in shops[i].goodsnum:#包含DS的放入shopds数组中
                shopds.append(shops[i])
            elif shops[i].goodsnum[0]=="8" :#开头是8的截取字符串,去掉开头的8,转换成数字
                #print(shops[i].goodsnum)
                shops[i].goodsnum = int(shops[i].goodsnum[-6:])
                #print(shops[i].goodsnum)
            elif shops[i].goodsnum[0]=="1":
                shops[i].goodsnum = int(shops[i].goodsnum)#转换成数字
        shops.remove(shops[0])#去掉表头
    
    def sorted():
        global shops
        global shopds
        print("所有店铺的个数",len(shops))
        shops=list(set(shops).difference(shopds))#将商品编号有DS的过滤出来,取差集
        print("不含DS的个数",len(shops))
        cmpfun = operator.attrgetter('goodsnum') #按照商品编号排序进行排序
        shops.sort(key=cmpfun)
        shopds.sort(key=cmpfun)  # 按照商品编号排序
        for obj in shops:#将shops里的商品按照店铺名分别放入不同列表
            if obj.name=="AAAAAAAA":
                listt.append(obj)
            elif obj.name=="BBBBBBBBBB":
                listj.append(obj)
            elif obj.name=="CCCCCCCCCCCCC":
                listr.append(obj)
            elif obj.name=="DDDDDDDDDDDDDDDDD":
                listy.append(obj)
            elif obj.name=="EEEEEEEEEEEEEE":
                listc.append(obj)
            elif obj.name=="FFFFFFFFFFFFFFFFff":
                listbc.append(obj)
            else:
                listg.append(obj)
        for i in range(0,len(shopds)):#遍历DS开头的
            #print(shopds[i].name,"\t",shopds[i].goodsnum)
            shopds[i].goodsnum=int(shopds[i].goodsnum[2:])#将DS开头的去掉DS,剩下数字
        for obj in shopds:#将商品编号含有DS的商品按照店铺名称,分别放入不同的列表
            if obj.name=="AAAAAAAAAAAAAAAAA":
                listtd.append(obj)
            elif obj.name=="BBBBBBBBBBBBBB":
                listjd.append(obj)
            elif obj.name=="CCCCCCCCCCCCCCC":
                listrd.append(obj)
            elif obj.name=="DDDDDDDDDDDDDDDD":
                listy.append(obj)
            elif obj.name=="EEEEEEEEEEEEEEEEEE":
                listcd.append(obj)
            elif obj.name=="FFFFFFFFFFFFFFFF":
                listbcd.append(obj)
            else:
                listgd.append(obj)
    
    def addexcel(sheet,wb,lists,listds,path):
        addsame(lists)
        sheet_Shops(sheet, wb, lists,path)
        addsame(listds)
        sheet_ShopDs(sheet, wb, listds, path)
    def insertexcel():
        for i in range(0, 7):
            wbs[i] = xlwt.Workbook()
            sheetWrites[i] = wbs[i].add_sheet("sheet")
        addexcel(sheetWrites[0], wbs[0], listt, listtd, "F:/excel/AAAAAAAA.xls")
        addexcel(sheetWrites[1], wbs[1], listj, listjd, "F:/excel/BBBBBBBBBBB.xls")
        addexcel(sheetWrites[2], wbs[2], listr, listrd, "F:/excel/CCCCCCCCCCCC.xls")
        addexcel(sheetWrites[3], wbs[3], listy, listyd, "F:/excel/DDDDDDDDDDD.xls")
        addexcel(sheetWrites[4], wbs[4], listc, listcd, "F:/excel/EEEEEEEEEEEE.xls")
        addexcel(sheetWrites[5], wbs[5], listbc, listbcd, "F:/excel/FFFFFFFFFFFFFFFF.xls")
        addexcel(sheetWrites[6], wbs[6], listg, listgd, "F:/excel/GGGGGGGGGGGGG.xls")
    
    def paging(path):
        #path="F:/excel/tmpdb.xls"
        workbook = xlrd.open_workbook(path)
        sheets = workbook.sheet_names();
        worksheet = workbook.sheet_by_name(sheets[0])
        wbs = [xlwt.Workbook()] * 10
        sheetWrites = [xlwt.Workbook().add_sheet("sheet")] * 10
        if worksheet.nrows>500:
            wb = xlwt.Workbook()
            goods=[1]*worksheet.nrows
            for i in range(0,worksheet.nrows):
                goods[i] = store(worksheet.cell_value(i, 0), worksheet.cell_value(i, 1), worksheet.cell_value(i, 2),
                                 worksheet.cell_value(i, 3))
            wbnum=math.floor(len(goods) / 500)
    
            for i in range(0,wbnum):
                wbs[i]=xlwt.Workbook()
                sheetWrites[i]=wbs[i].add_sheet("sheet")
                t=0
                path = path[:14] + str(i+2) + ".xls"
                print(path)
                #print(i)
                if i < wbnum-1:
                    for j in range(500*(i+1),500*(i+2)):
                        sheetWrites[i].write(t, 0, goods[j].name)
                        sheetWrites[i].write(t, 1, goods[j].goodsnum)
                        sheetWrites[i].write(t, 2, goods[j].final)
                        sheetWrites[i].write(t, 3, goods[j].salnum)
                        t=t+1
                        wbs[i].save(path)
                elif i==wbnum-1:
                    for j in range(500*wbnum,len(goods)):
                        sheetWrites[i].write(t, 0, goods[j].name)
                        sheetWrites[i].write(t, 1, goods[j].goodsnum)
                        sheetWrites[i].write(t, 2, goods[j].final)
                        sheetWrites[i].write(t, 3, goods[j].salnum)
                        t = t + 1
                        wbs[i].save(path)
        else:
            pass
    def cut():
        paging("F:/excel/AAAAAAAAAAAA.xls")
        paging("F:/excel/BBBBBBBBBBBBB.xls")
        paging("F:/excel/CCCCCCCCCCC.xls")
        paging("F:/excel/DDDDDDDDDDD.xls")
        paging("F:/excel/EEEEEEEEEEEEE.xls")
        paging("F:/excel/FFFFFFFFFFFF.xls")
        paging("F:/excel/GGGGGGGGGGGG.xls")
    
    readexcel()
    sorted()
    insertexcel()
    cut()
    


    
    
    
    

    展开全文
  • df = pd.read_excel(r'C:/Users/***/Desktop/**/日期排序/日期数据4.xlsx',header=None,names=['riqi']) df.sort_values(by=['riqi'],ascending = True,inplace= True) df['year_month'] = df['ri

    输入一组日期
    利用Python判断时间是否连续
    若不连续 给出间断日期 缺失了几个月份
    以及缺失的日期

    import pandas as pd
    
    
    df = pd.read_excel(r'C:/Users/***/Desktop/**/日期排序/日期数据4.xlsx',header=None,names=['riqi'])
    
    
    df.sort_values(by=['riqi'],ascending = True,inplace= True)
    
    
    
    
    df['year_month'] = df['riqi'].apply(lambda x:x.strftime('%Y-%m'))   # 转换格式
    
    
    df_riqi= df['year_month'].drop_duplicates().reset_index(drop = True)
    
    
    blank_dic = {}  # 空值字典,从哪里开始往后缺了几个月的数据
    lost_list = []  # 缺失的月份列表
    
    
    for each in range(len(df_riqi)-1):     # 主要判断这个月和下个月的关系
        count = 0
        year = int(df_riqi[each].split('-')[0])
        month = int(df_riqi[each].split('-')[1])
        year_n = int(df_riqi[each+1].split('-')[0])   # 下一条记录的年份和月份
        month_n = int(df_riqi[each+1].split('-')[1])
        if month != 12 and month == (month_n -1) and year == year_n:
            pass
        elif month == 12 and month_n == 1 and year == (year_n-1):
            pass
        else:
            count = (month_n - month - 1) + (year_n - year)*12  # 统计缺失个数
            blank_dic[df_riqi[each]] = count
    
    
            while count:
                month = month + 1
                if month<=12:
                    lost_list.append(str(year) + '-' + str(month))
                else:
                    n = (month-1) // 12
                    lost_list.append(str(year+n) + '-' + str(month-12*n))  # 大于12后,变为下一年
                count = count -1
    
    
    
    
    if len(blank_dic) == 0:
        print('数据连续')
    else:
        print('数据间断')
        print(blank_dic)
        print(lost_list)
    

    1995/1/24
    1995/1/26
    1995/1/28
    1998/3/30
    1995/2/28
    1995/3/2
    1995/3/5
    1995/6/6
    1995/3/27
    1995/6/25
    1995/7/31
    1995/8/4
    1995/10/7
    1995/11/8
    1995/12/9
    1996/6/3

    out:
    数据间断
    {‘1995-03’: 2, ‘1995-08’: 1, ‘1995-12’: 5, ‘1996-06’: 20}
    [‘1995-4’, ‘1995-5’, ‘1995-9’, ‘1996-1’, ‘1996-2’, ‘1996-3’, ‘1996-4’, ‘1996-5’, ‘1996-7’, ‘1996-8’, ‘1996-9’, ‘1996-10’, ‘1996-11’, ‘1996-12’, ‘1997-1’, ‘1997-2’, ‘1997-3’, ‘1997-4’, ‘1997-5’, ‘1997-6’, ‘1997-7’, ‘1997-8’, ‘1997-9’, ‘1997-10’, ‘1997-11’, ‘1997-12’, ‘1998-1’, ‘1998-2’]

    展开全文
  • 本文介绍了python技能之导出excel的实例代码,正好能用到,写出来分享大家 作为一个数据分析师,下面的需求是经常会遇到的。 从数据库或者现有的文本文件中提取符合要求的数据,做一个二次处理,处理完成后的...
  • 本人出了一段用python实现这一功能的程序。本程序中,数据以列表形式存储,将用于排序的那一组数据称为主动排序数据,将跟随主动排序数据而变动的数据称为被动排序数据。编程的核心思想是:先根据冒泡排序法把主动...

    excel里的排序功能很强大,它能使得所有列的数据按照某一列的升序或者降序统一实现排序。这个功能用编程如何实现呢?本人给出了一段用python实现这一功能的程序。本程序中,数据以列表形式存储,将用于排序的那一组数据称为主动排序数据,将跟随主动排序数据而变动的数据称为被动排序数据。编程的核心思想是:先根据冒泡排序法把主动数据进行升序排列,并且跟踪索引的变化,然后根据排序后的已经更改的索引反推出被动数据相应的排序后状态。程序如下:

    q=[182,330,400,360,200]#主动排序数据
    t=[51,62,74,40,31]#被动排序数据
    idx=[q.index(q[i]) for i in range(len(q))]#主动排序数据的索引
    l=len(q)#数据长度
    
    print('排序前的数据A和B及其索引:')
    print(q,'主动排序')
    print(t,'被动排序')
    print(idx)
    
    for i in range(0,l-1):
        for j in range(0,l-1-i):
            if q[j] > q[j+1]:
                a = q[j+1]
                b=idx[j+1]
                q[j+1] = q[j]
                idx[j+1]=idx[j]
                q[j] = a
                idx[j]=b
    tt=[]
    for i in range(l):
            tt.append(t[idx[i]])
    t=tt
    print('排序后的数据A和B及其索引:')
    print(q,'主动排序')
    print(t,'被动排序')
    print(idx)

    程序运行结果如下:

    排序前的数据A和B及其索引:
    [182, 330, 400, 360, 200] 主动排序
    [51, 62, 74, 40, 31] 被动排序
    [0, 1, 2, 3, 4]
    排序后的数据A和B及其索引:
    [182, 200, 330, 360, 400] 主动排序
    [51, 31, 62, 40, 74] 被动排序
    [0, 4, 1, 3, 2]

    展开全文
  • 但要想获取热门评论,用之前的方法得把评论爬个遍,然后按点赞数排序。这种做法一来费时,二来爬的不完整(除非把微博数据库全爬下来)。但微博后台已经帮我们所有评论排了序,所以我们直接爬热门评论就好了。 ...
  • [table=98%] [tr][td=72]id[/td][td=72]班别[/td][td=72]姓名[/td][td=72]语文[/td][td=72]数学[/td][td=72]英语[/td][td=72]物理[/td][td=72]化学[/td][td=...
  • Python Cookbook

    2013-07-31 22:33:26
    16.6 使用内建的Tokenizer给Python源码上色 572 16.7 合并和拆解Token 575 16.8 检查字符串是否有平衡的圆括号 577 16.9 在Python中模拟枚举 580 16.10 在创建列表推导时引用它自身 583 16.11 自动化py2exe将...
  • xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。 xlwt / xlrd:读写 Excel 文件的数据和格式信息。 docxtpl:通过 jinja2 模版编辑 docx 文档。 PDF PDFMiner:一个用于从 ...
  • 希望能在工作中帮您一定的帮助。 我这本文章中先导入包,读取了本地的一个文件,内容有字符串、时间。 # import导入模块 import pandas as pd import numpy as np # 读取Excel文件 data = pd.read_excel('./meal_...
  • 问题描述: 如下图所示,有一个近2000行的数据表,需要把其中...python生成的表格是这个样子滴^_^那些空白的行就是不符合要求的,我们还需要把这些空白的行删掉~ 方法很简单,使用excel的定位条件->空值->将所选行删
  • 列表常用操作 - 连接 / 复制(复制元素和复制数组) / 长度 / 排序 / 倒转 / 查找 生成列表 - 使用range创建数字列表 / 生成表达式 / 生成器 元组的使用 - 定义元组 / 使用元组中的值 / 修改元组变量 / 元组和列表转换...
  • python提取包含关键字的整行数据

    万次阅读 多人点赞 2016-03-19 21:12:37
    如下图所示,有一个近2000行的数据表,需要把其中含有关键字‘颈廓清术,中央组(VI组)’的数据所在行都都抽取出来,且提取后的表格不能改变原先的顺序。 问题分析: 一开始想用excel的筛选功能,但是发现只提供...
  • 2)将不是0的数据从大到小排序,并赋权重,各权重相加为1;3)清洗后的数据,模式编号和站点不能变化。 代码实现 导入包,获得数据 import pandas as pd import numpy as np data = pd.read_excel("ttt.xlsx",sheet_...
  • Python教程看的有点疲乏,还是写点东西吧~ 为什么说是简讲呢,其实分析函数在工作中用到的地方也是非常多的,但是它可以实现的方面有很多,这里大家讲三方面:1.分组内排序、2.分组内求聚合、3.计算行与行数据...
  • 列表:创建、删除、修改、切片、访问、排序;多维列表 2. 元组:创建、删除、切片、访问 3. 字典:创建、删除、添加、修改及访问,有序字典的使用 4. 集合:创建、删除、访问,集合的并、...
  • 词条数据大小写不敏感,不论从查询还是排序,还是编程接口。 词形变化 某个动词的各种时态是什么?某个形容词的比较级和最高级又是什么?某个名词的复数呢?这个单词是由哪个单词怎么演变而来的?它的原型单词...
  • 测试培训教材

    2014-04-01 12:10:48
    The VAPI-XP testing tool enables you to create new testing scripts using Microsoft VBScript, Microsoft JavaScript (JScript version), PerlScript, and PythonScript, and integrate these scripts into your...
  • 大家丢脸了,用了三年golang,我还是没答对这道内存泄漏题 内存碎片化问题 chan相关的goroutine泄露的问题 string相关的goroutine泄露的问题 你一定会遇到的内存回收策略导致的疑似内存泄漏的问题 sync.Pool的适用...
  • Kofler还是Definitive Guide to Excel VBA第2版的作者。 目录 封面 -23 封底 -22 扉页 -21 版权 -20 版权声明 -19 译者序 -18 前言 -16 目录 -11 第一部分 入门 1 第1章 什么是MySQL 2 1.1 什么是数据库 2 1.1.1...
  • 欢迎大家推荐自己觉得不错的 Java 项目,下面项目的排序很大程度是根据当前项目的 Star 数量。 如果有码云上比较好的项目的话,我也会推荐到这里来!另外,我也会推荐少部分过于优秀但是非开源的优质 Java 项目。 ...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

python给excel排序

python 订阅