美文网首页
Python第19课:数据清洗之去错、去空、去重

Python第19课:数据清洗之去错、去空、去重

作者: 启蒙时代 | 来源:发表于2019-02-01 22:37 被阅读0次

    Python第19课:数据清洗之去错、去空、去重

    时间 2019-02-01 下午3:30

    主讲 刘培富

    地点 四楼电教室


    数据清洗是数据治理的关键环节,是指对获取的原始数据(也称“脏数据”)进行审查、校验、加工的过程,目的在于删除重复信息、纠正错误信息,保持数据一致性。

    一般来说,数据清洗,主要是对数据进行去错、去空、去重处理。

    一、去错

    针对一张包含姓名、身份证号码、车牌号码的数据表,建立纠错规则如下:

    1.车牌号既不包含汉字赣,且不包含汉字饶。

    2.身份证号码的年份既不等于19也不等于20,身份证号码的月份大于12,身份证号码的日期大于31。

    3.身份证号码位数不等于18。

    4.姓名的长度小于等于1。

    import cx_Oracle

    conn=cx_Oracle.connect('lpf/****@//****/****')

    cur=conn.cursor()

    sql="select * from diandong"

    cur.execute(sql)

    data=cur.fetchall()

    jg="数据清洗发现的问题数据:"

     m=0

    for i in data:

    b=i[2]

    if b.find('饶')==-1 and b.find('赣')==-1 and b.find('弋')==-1:

    print(i)

    m += 1

    jg += chr(10) + str(m) + "、" + i[0] + "," + i[1] + ',' + i[2] + '。原因:车牌错误'

    a=i[1]

    if(a.find("MA")<0):

    if (a[6:8]!="19" and a[6:8]!="20") or int(a[10:12])>12  or int(a[12:14])>31:

    m+=1

    jg+=chr(10)+str(m)+"、"+i[0]+","+i[1]+','+i[2]+'。原因:身份证号码错误'

    if len(a)!=18:

    m+=1

     jg+=chr(10)+str(m)+"、"+i[0]+","+i[1]+','+i[2]+'。原因:身份证号码不是18位'

    if len(i[0])<=1:

    m+=1

    jg += chr(10) + str(m) + "、" + i[0] + "," + i[1] + ',' + i[2] + '。原因:姓名长度不足2位'

    print(jg)

    f=open('D:\\abc.txt','w')

    f.write(jg)

    f.close()

    cur.close()

    conn.close()

    二、去空

    对于关键性数据,不允许为空,对于这类数据,要查询是否存在空值。

    for i in data:

    if i[0] is None or i[1] is None or i[2] is None:

    print(i)

    if i[0]=='' or i[1]=='' or i[2]=='':

    print(i)

    三、去重

    在一张表中,有的数据列允许重复,有的数据列则不允许重复。例如,对于一张车主信息表来说,姓名、身份证号可以重复,因为存在一人登记多辆车的情形,这种重复,不能认为是错误。但是,车牌号则不允许重复,否则就存在业务逻辑的错误。所以,针对车牌号数据列,要进行去重。

    通过以下SQL语句,可以列出重复的数据:

    select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1

    例:select id,count(*) from abc group by id having count(*)>1

    返回:

    id,count(*)

    1,2

    综上,数据清洗,既要懂技术,更要懂业务,否则无法正确制定清洗规则,导致数据清洗流于形式,达不到清洗的效果。

    相关文章

      网友评论

          本文标题:Python第19课:数据清洗之去错、去空、去重

          本文链接:https://www.haomeiwen.com/subject/hdersqtx.html