精华内容
下载资源
问答
  • Python筛选EXCEL数据

    2020-12-25 22:52:35
    Python筛选EXCEL数据Python筛选EXCEL数据 Python筛选EXCEL数据 我们在实际业务过程中,可能涉及到excel数据清洗的场景,本次代码处理的是客户个人基本信息的清洗操作,其中包含了身份证,性别,国籍,电话,职业,...

    Python筛选EXCEL数据

    Python筛选EXCEL数据

    我们在实际业务过程中,可能涉及到excel数据清洗的场景,本次代码处理的是客户个人基本信息的清洗操作,其中包含了身份证,性别,国籍,电话,职业,身份证地址,居住地地址,职业描述,以及证件起始日期的筛选操作,我们可以根据实际需要一并判断都判断,或者单个判断,实际代码如下:

    配置文件名:config.ini

    [File]
    ### 填写待处理文件信息
    file_name1 = C:\Users\Administrator\Desktop\新建 Microsoft Excel 工作表.xlsx
    sheet_name = Sheet1
    
    [9yaosu]
    ### 请填写需要处理的数据在数据表中的列名,例如ABCDEF,如果以下的筛选数据不需要筛选时可以直接不写列名信息
    ### 身份证列名
    id_position =S
    ### 性别列名
    sex_position =
    ### 国籍列名
    nationality_position =R
    ### 电话列名
    phone_position =L
    ### 职业列名
    job_position =
    ### 身份证地址列名
    id_address_position =O
    ### 居住地址列名
    live_address_position =
    ### 职业描述列名
    job_description_position =W
    ### 证件起始时间列名(必须同时都填或者都不填)
    certificates_start_time_position =J
    certificates_end_time_position =K
    

    python脚本文件:xx.py

    # coding=utf-8
    import configparser
    import os
    import re
    import time
    from xlrd import xldate_as_tuple
    from datetime import datetime
    import openpyxl
    import xlrd
    from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
    
    
    def fix_illegal(s):
        try:
            a = ILLEGAL_CHARACTERS_RE.sub(r"", s)
        except:
            a = s
        return a
    
    
    if __name__ == '__main__':
        cf = configparser.ConfigParser()
        cf.read("config.ini", encoding="utf-8")
        start_time = time.time()
        """待处理数据的文件名"""
        file_name1 = cf.get("File", "file_name1")
        """待处理的excel中需要操作的sheet名"""
        sheet_name = cf.get("File", "sheet_name")
        """异常数据的文件名"""
        empty_file = os.path.dirname(file_name1) + r"\异常数据.xlsx"
        """完整数据的文件名"""
        full_file = os.path.dirname(file_name1) + r"\完整数据.xlsx"
        excel = xlrd.open_workbook(file_name1)
        sheet = excel.sheet_by_name(sheet_name)
        rows = sheet.nrows
        cols = sheet.ncols
        row1 = sheet.row_values(0)
        count1 = 1
        count2 = 1
    
        """新建空数据表"""
        empty_excel = openpyxl.Workbook()
        empty_sheet = empty_excel.active
        empty_sheet.title = (sheet_name)
        empty_sheet.append(row1)
        """新建完整数据表"""
        full_excel = openpyxl.Workbook()
        full_sheet = full_excel.active
        full_sheet.title = (sheet_name)
        full_sheet.append(row1)
    
        dic = {"A": 1, "B": 2, "C": 3, "D": 4, "E": 5,
               "F": 6, "G": 7, "H": 8, "I": 9, "J": 10,
               "K": 11, "L": 12, "M": 13, "N": 14, "O": 15,
               "P": 16, "Q": 17, "R": 18, "S": 19, "T": 20,
               "U": 21, "V": 22, "W": 23, "X": 24, "Y": 25, "Z": 26}
    
        """获取校验元素位置"""
        id_position = dic.get(cf.get("9yaosu", "id_position"), 0)
        sex_position = dic.get(cf.get("9yaosu", "sex_position"), 0)
        nationality_position = dic.get(cf.get("9yaosu", "nationality_position"), 0)
        phone_position = dic.get(cf.get("9yaosu", "phone_position"), 0)
        job_position = dic.get(cf.get("9yaosu", "job_position"), 0)
        id_address_position = dic.get(cf.get("9yaosu", "id_address_position"), 0)
        live_address_position = dic.get(cf.get("9yaosu", "live_address_position"), 0)
        job_description_position = dic.get(cf.get("9yaosu", "job_description_position"), 0)
        certificates_start_time_position = dic.get(cf.get("9yaosu", "certificates_start_time_position"), 0)
        certificates_end_time_position = dic.get(cf.get("9yaosu", "certificates_end_time_position"), 0)
    
        for i in range(1, rows):
            row_value = sheet.row_values(i)
            c1 = True
            c2 = True
            c3 = True
            c4 = True
            c5 = True
            c6 = True
            c7 = True
            c8 = True
            c9 = True
    
            # ==================================================================================
            """判断身份证和性别数据是否正常"""
            if id_position > 0:
                id_card = row_value[id_position - 1].strip()
                # 如果身份证存在就判断身份证倒数第二位是否跟性别相符合
                if sex_position > 0:  # 如果表中存在性别,则判断性别是否是男或者女
                    sex = row_value[sex_position - 1].strip()
                    # 获取客户性别
                    id_sex = ["男", "女"][id_card and (int(id_card[-2]) % 2 == 0)]
                    c1 = id_sex in sex
                # 当身份证存在时判断身份证是否正常
                if id_card:
                    c8 = ((id_card[0:-1].isdecimal() or id_card[-1].isdecimal() or id_card[-1] == "X")
                          and len(id_card) == 18)
                else:
                    c8 = False
            else:  # 如果身份证不存在则直接判断性别是否是男或者女
                if sex_position > 0:  # 如果表中存在性别,则判断性别是否是男或者女
                    sex = row_value[sex_position - 1].strip()
                    c1 = "男" in sex or "女" in sex
    
            # ==================================================================================
            """判断国籍数据是否正常"""
            if nationality_position > 0:
                nationality = row_value[nationality_position - 1].strip()
                c2 = "中国" in nationality or "CN" in nationality
    
            # ==================================================================================
            """判断电话号码数据是否正常"""
            if phone_position > 0:
                phone = row_value[phone_position - 1].strip()
                c3 = phone.isdecimal() and (len(phone) == 8 or len(phone) == 11)
    
            # ==================================================================================
            """判断职业数据是否正常"""
            if job_position > 0:
                job = row_value[job_position - 1].strip()
                c4 = len(job) > 0
    
            # ==================================================================================
            """判断身份证地址数据是否正常"""
            if id_address_position > 0:
                id_address = row_value[id_address_position - 1].strip()
                c5_1 = (len(re.findall("([\u4e00-\u9fbb])", id_address)) > 9)
                # 判断地址是否合法
                a = ["省", "市", "区", "县", "镇", "村", "湾", "弯", "巷", "弄", "公司", "厂", "室", "号", "户", "乡", "组"]
                c5 = c5_1 and any(i in a for i in id_address)
    
            # ==================================================================================
            """判断居住地地址数据是否正常"""
            if live_address_position > 0:
                live_address = row_value[live_address_position - 1].strip()
                c6_1 = (len(re.findall("([\u4e00-\u9fbb])", live_address)) > 9)
                a = ["省", "市", "区", "县", "镇", "村", "湾", "弯", "巷", "弄", "公司", "厂", "室", "号", "户", "乡", "组"]
                c6 = c6_1 and any(i in a for i in live_address)
    
            # ==================================================================================
            """判断职业描述数据是否正常"""
            if job_description_position > 0:
                job_description = row_value[job_description_position - 1].strip()
                match = (re.compile(u"[\u4e00-\u9fbb]")).search(job_description)
                c7 = len(job_description) > 0 and (job_description != "无" or
                                                   job_description != "无无" or
                                                   job_description != "一般人员" or
                                                   job_description != "一般员工" or
                                                   job_description != "一贝人员" or
                                                   match)
    
            # ==================================================================================
            """判断证件到期数据是否正常"""
            if certificates_start_time_position > 0 and certificates_end_time_position > 0:
                a = row_value[certificates_start_time_position - 1]
                b = row_value[certificates_end_time_position - 1]
                if isinstance(a, float):
                    certificates_start_time = datetime(*xldate_as_tuple(a, 0)).strftime("%Y-%m-%d")
                else:
                    certificates_start_time = a.replace("-", "").replace("/", "").strip()
                if b:
                    if isinstance(a, float):
                        certificates_end_time = datetime(*xldate_as_tuple(b, 0)).strftime("%Y-%m-%d")
                    else:
                        certificates_end_time = b.replace("-", "").replace("/", "").strip()
                else:
                    certificates_end_time = "21991231"
                try:
                    start_year = int(certificates_start_time[0:4])
                    start_month = certificates_start_time[4:]
                    end_year = int(certificates_end_time[0:4])
                    end_month = certificates_end_time[4:]
                except:
                    start_year = 0
                    start_month = ""
                    end_year = 0
                    end_month = ""
    
                youxiao1 = (end_year - start_year == 5) and (start_month == end_month)
                youxiao2 = (end_year - start_year == 10) and (start_month == end_month)
                youxiao3 = (end_year - start_year == 20) and (start_month == end_month)
                youxiao4 = ("20991231" in certificates_end_time) or ("21991231" in certificates_end_time)
                youxiao = youxiao1 or youxiao2 or youxiao3 or youxiao4
                c9 = certificates_start_time and ("1899" not in certificates_start_time) and youxiao
    
            # 错误原因
            reason = ""
            if not c1:
                reason += "【性别不合法】"
            if not c2:
                reason += "【国籍不合法】"
            if not c3:
                reason += "【电话不合法】"
            if not c4:
                reason += "【职业不合法】"
            check_address = c5 and c6
            if not check_address:
                reason += "【地址不合法】"
            if not c7:
                reason += "【职业描述不合法】"
            if not c8:
                reason += "【身份证不合法】"
            if not c9:
                reason += "【证件起始日期不合法】"
    
            if c1 and c2 and c3 and c4 and check_address and c7 and c8 and c9:
                row_value1 = list(map(fix_illegal, row_value))
                full_sheet.append(row_value1)
                count1 = count1 + 1
            else:
                row_value1 = list(map(fix_illegal, row_value)) + [reason]
                empty_sheet.append(row_value1)
                count2 = count2 + 1
    
            print("\r", f"处理数据第{i}条....", end="", flush=True)
    
        """=================================================================================="""
        """打印完整数据数量/异常数据数量"""
        print("\n")
        print(f"完整数据数量是:{count1 - 1}")
        print(f"异常数据数量是:{count2 - 1}")
        """写入异常数据"""
        empty_excel.save(empty_file)
        """写入完整数据"""
        full_excel.save(full_file)
        """打印代码运行时间"""
        end_time = time.time()
        print(f"总耗费时间是:{end_time - start_time}s")
    
    
    展开全文
  • 学过点计算机,稍微懂点编程后,会感觉看很...前阵子,看着运营小妹妹天天花一个多钟筛选数据分类导出表格,脑子里就产生了想法,觉得这太废时间,应该会有更好的解决方式,大概了解了一下情况,决定做一个解决方案...

    学过点计算机,稍微懂点编程后,会感觉看很多问题的思维方式都有点不一样。遇上什么问题,首先都会想着有没有更优的解决方式。对于数据这类问题更是这样子,尤其是,遇上重复性操作的事情,总是会想着寻求更简便的方式去解决,能让计算机解决的问题,别浪费人工。

    前阵子,看着运营小妹妹天天花一个多钟筛选数据分类导出表格,脑子里就产生了想法,觉得这太废时间,应该会有更好的解决方式,大概了解了一下情况,决定做一个解决方案。

    初步梳理了一下问题后,逻辑很清楚,实现思路也很清晰,但是关键问题是,没有技术人员(有技术这个问题都不叫问题,很简单的一个事情),方案落地困难,敲代码我并不熟手,虽然也能读懂简单代码,但是没有技术的配合,要自己敲,时间成本高,得先学。

    这个事情其实并不是需求内的事情,就是说不去解决这个问题,也不是什么大事,但我还是觉得解决这个问题是有意义的,要做。解决没技术支撑这个问题,有两种途径:

    1、花点时间自己学自己动手,能学点技能,但时间成本高;

    2、协调其他部门的技术人员,但显然这个解决方式在这里显得更加复杂。

    像是这种需要技术支撑的问题,如果是需求内的事情,正常程序还是去协调人力资源比较符合常理(这个有很多原因这里不讲),但基于这不是个确定的紧急需求,刚好之前在某个交流群里面吹水说要不要一起学点新东西,人工智能的,python是基础,也有想过要学一下python,有点兴趣,所以决定把这个学一下,把这个数据的筛选问题作为练习。

    抽了时间(一个周末和上班期间一些空余时间加起来差不多也就三四天),看了python的基础,差不多了解了语言规则,安装环境,还有怎么样在本地运行后,就开始找关于数据筛选导出表格的解决方案,看看别人是怎么做相关类型的东西的,然后开始自己尝试写,然后debug。

    最后调试完成的时候,有点成就感,虽然熟练的程序员两个小时就能解决这个问题,我花了三四天,代码肯定也不是最优的,但至少我把这个问题解决了,而这个学习过程,自己也在提高自己解决问题的能动性。搞定了以后帮他们装运行环境,教他们怎么操作,瞬间感觉自己的level都up了好几层。可能以后不用的时候,很多东西又会忘记,趁记得,记录一下学习过程:

    1)安装python环境:

    直接在电脑本地安装环境也可以,不过之前学网页爬虫的时候郑同学介绍过Anaconda,专注于数据分析的Python发行版本,所以就直接用这个了。

    2)学python基础:

    网上找了很多,最后看了廖雪峰老师的教程,觉得适合自己:https://www.liaoxuefeng.com,邓同学也推荐了菜鸟教程,不过我个人更喜欢廖老师的讲解。其实一上来,直接去网上找一下别人的代码改一改,即使半懂半不懂也能解决这个问题,但个人觉得需要简单打一下基础,弄明白关键点,还有每一行代码的意思,毕竟这是个比较简单的程序,复杂的另说(单行过这个习惯是交换生的时候被教授逼着养成的,后面觉得对个人的编程学习规范性还是有很大的影响的)。

    3)敲代码:

    用python语言写一个简单的表格筛选程序,测试,运行成功后,再把完整的程序写出来,慢慢调试。

    感谢互相学习的同学们,表扬一下解决了一个小问题的自己。

    2018.06.15

    展开全文
  • Python筛选Excel数据,读取、保存

    千次阅读 2019-01-11 17:59:44
    import re import xlrd ... #读取Excel  wk=xlrd.open_workbook(r'C:\Users\https://mp.csdn.net/posteditPublic\Nwt\cache\recv\旧白名单.xlsx')  #获取目标EXCEL文件sheet名  sheets=wk.sheet...

    import re
    import xlrd
    import xlwt
    def main():
        #读取Excel
        wk=xlrd.open_workbook(r'C:\Users\https://mp.csdn.net/posteditPublic\Nwt\cache\recv\旧白名单.xlsx')
        #获取目标EXCEL文件sheet名
        sheets=wk.sheet_names()
        #根据表索引
        ws=wk.sheet_by_index(0)
        #获取总行数
        nrows=ws.nrows
        #获取总列数
        ncols=ws.ncols
        print(nrows,ncols)
        #获取一列的值row_values(i)#获取一行的数值
        datarow=ws.col_values(1)
        # print(type(datarow))
        #拼接字符串
        text=" ".join('%s' %id for id in datarow)
        # print(type(text))
        m=re.findall(r"130\d{8}",text)
        if m:
            print('1111',m)
            return m
     
    def main_n(fun):
        m=fun()
        print("5555",m)
        book = xlwt.Workbook(encoding='utf-8', style_compression=0)
        sheet = book.add_sheet('demom', cell_overwrite_ok=True)
        count=0
        for a in m:
            count+=1
            print(count)
            sheet.write(count,0,a)
            book.save('130.xls')
    if __name__ == "__main__":
        main_n(main)
    --------------------- 
    作者:lly2234317974 
    来源:CSDN 
    原文:https://blog.csdn.net/lly2234317974/article/details/80524658 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 情景:当我们需要从excel表中筛选出符合某个条件的数据,例如我们需要从附加标签中筛选出2班的行数据 import xlrd import xlwt #需处理的文件名 file = '0422.xlsx' #读取文件 data = xlrd.open_workbook(file...

    情景:当我们需要从excel表中筛选出符合某个条件的数据,例如我们需要从附加标签中筛选出2班的行数据

    import xlrd
    import xlwt
    
    #需处理的文件名
    file = '0422.xlsx'
    
    #读取文件
    data = xlrd.open_workbook(file)
    
    #读取要处理的表名
    table = data.sheet_by_name("1")
    
    nrows = table.nrows#行数
    ncols = table.ncols#列数
    
    print(nrows-1)
    #添加表头
    workbook = xlwt.Workbook(encoding='utf-8')
    new_sheet=workbook.add_sheet('test')
    
    
    
    data = input('输入你想要筛选的数据,format(#2班)\n')
    #data1 = input('输入第几列,format(3)\n')
    
    rank_list = []
    for i in range (1,nrows):
    	if table.row_values(i)[6]==data: #筛选第几列就改 [1] 里的数字
    		rank_list.append(i)
    print(rank_list)
    
    #写表头
    for i in range(ncols):
    	new_sheet.write(0,i,table.cell(0,i).value)
    
    for i in range(len(rank_list)):
    	for j in range(ncols):
    		new_sheet.write(i+1, j, table.cell(rank_list[i],j).value)
    
    workbook.save('shaixuanhou.xls')

     输出结果如下

     

    展开全文
  • python的win32com如何筛选excel数据?win32com如何按照日期或者包含的字符串进行筛选?相关阅读:判断浏览器不同的js?mysql中这句select为什么查询出的是空数据?如何使用runtime获取UIApplication单例并调用其方法?...
  • 下面这篇文章主要给大家介绍了关于pythonexcel进行数据剔除操作的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。Python解析Excel时需要安装两个包,分别是xlrd(读excel)和xlwt...
  • python筛选excel某一列中相同的数据

    万次阅读 多人点赞 2018-11-13 11:34:57
    python筛选excel某一列中相同的数据 1.需要cmd下载 pip install pandas 的模板 2.注意文件的路径问题不要出错 3.还有文件的编码格式 ------encoding = 'gbk' import pandas as pd #读取excel文件信息 d...
  • Python处理Excel数据-pandas篇非常适用于大量数据的拼接、清洗、筛选及分析在计算机编程中,pandas是Python编程语言的用于数据操纵和分析的软件库。特别是,它提供操纵数值表格和时间序列的数据结构和运算操作。它的...
  • Python筛选Excel数据,并导出!

    千次阅读 2019-04-03 22:14:00
    data = pd.read_excel('E:\workup.xlsx')#打开表格 FF = data.loc[(data['OBJECTID'] == 0)]#搜索OBJECTID中等于0的值print(FF) FF.to_excel('o.xlsx') 转载于:...
  • 有没有这样的程序,或者用Python代码也行。有一个e...把你录制的宏里面的工作表...Python怎样实现数据筛选之后不存成excel?1 读取Excel使用xlrd#1、导入扩展包importxlrd#2、打开Excel文件读取数据data=xlrd.open_w...
  • 前言Python的数据清洗功能有多厉害,相信不用我说大家都知道了,寥寥...今天给大家来点干货,教大家如何利用pythonEXCEL数据进行筛选,让大家可以对python快速入门,并可以领略到python的数据分析魅力。数据源我...
  • Python处理Excel数据-pandas篇非常适用于大量数据的拼接、清洗、筛选及分析在计算机编程中,pandas是Python编程语言的用于数据操纵和分析的软件库。特别是,它提供操纵数值表格和时间序列的数据结构和运算操作。它的...
  • 利用pythonexcel中的数据进行筛选和过滤,需要导入pandas 包 ,安装 xlrd 。将会用到loc[]函数series中的apply()方法dataframe中的read_excel()对如图中的数据进行操作import 运行结果如图所示:...
  • 教你利用Python做数据筛选(下)前言回顾一下上次的案例模型,我们知道了只要写3行代码,就可以利用pythonEXCEL数据做简单的筛选,说明了python是一门非常简单和实用的数据分析工具。前面学过的这几句简单的语言,不...
  • Excel数据分析中最常用的工具,本篇文章通过pythonexcel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作。在Python中pandas库用于数据处理 ,我们从1787页的pandas官网文档中总结出...
  • 前言做数据分析的时候通常我们并不是对真个excel文件进行操作,换言之,每一列都是一个特征,我们需要针对分析。遇到这类问题的时候,我们通常想得到一列中所有符合条件的数据,挑出来,然后组成一个单独的文件进行...
  • 前言回顾一下上次的案例模型,我们知道了只要写3行代码,就可以利用pythonEXCEL数据做简单的筛选,说明了python是一门非常简单和实用的数据分析工具。前面学过的这几句简单的语言,不知道你们学会了没?今天我们...
  • Python几个读取Excel库的介绍:xlwings可结合 VBA 实现对 Excel 编程,强大的数据输入分析能力,同时拥有丰富的接口,结合 pandas/numpy/matplotlib 轻松应对 Excel 数据处理工作。openpyxl简单易用,功能广泛,...
  • Python处理Excel数据-pandas篇

    千次阅读 2020-12-15 20:15:41
    Python处理Excel数据-pandas篇 非常适用于大量数据的拼接、清洗、筛选及分析 在计算机编程中,pandas是Python编程语言的用于数据操纵和分析的软件库。特别是,它提供操纵数值表格和时间序列的数据结构和运算操作。...
  • excel数据如下1、年龄大于等于5岁的孩子loc方法通过标签或者bool数组选取一些行和列。注意 loc后边跟的是方括号[];调用series的方法apply(),apply(age_5)接函数名意思是用这个函数过滤一遍这一列里的数据 就是把这...
  • Excel数据分析中最常用的工具,本篇文章通过pythonexcel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作。在Python中pandas库用于数据处理 ,我们从1787页的pandas官网文档中总结出...
  • PythonExcel 快速按条件筛选数据 本文即使用python实现excel快速筛选数据 有一张 12 个月份的产品销售情况表。 安装所需的 Python 第三方库 xlwings 的特色: xlwings 能够非常方便地读写 Excel 文件中的...
  • 今天我们来讲解一个比较简单的案例,使用openpyxl从Excel中提取指定的数据并生成新的文件,之后进一步批量自动化实现这个功能,通过本例可以学到的知识点:openpyxl模块的运用glob模块建立批处理数据源...
  • /usr/bin/env python # -*- coding:utf-8 -*- import os import openpyxl import datetime import time year_list = [2013, 2014, 2015, 2016, 2017, 2018] file_path = r"F:/test" file_name = "数据按年份筛查到...
  • excel表格数据筛选功能 方法二 利用编程语言(python) 使用第三方库pandas 处理数据是covid-19数据数据时间从2020.1.22至2020.4.3,数据量大,有八九万条数据,如果只是手动提取,费时费力。采用编程代码的方式...
  • 原标题:懂点EXCEL就行!教你利用Python做数据筛选(上)前言Python的数据清洗功能有多厉害,相信不用我说大家都知道了,寥寥几行...今天给大家来点干货,教大家如何利用pythonEXCEL数据进行筛选,让大家可以对pyt...
  • 前言Python的数据清洗功能有多厉害,相信不用我说大家都知道了,寥寥...今天给大家来点干货,教大家如何利用pythonEXCEL数据进行筛选,让大家可以对python快速入门,并可以领略到python的数据分析魅力。数据源我...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 684
精华内容 273
关键字:

python筛选excel数据

python 订阅