python之数据清洗

python之数据清洗

定义

对原始数据进行整理、标注,形成一份“干净”的数据,使其适合特定场景,这个过程就是数据清洗。这是一个反复的过程,在发现噪声数据后,还需要筛选出这些数据,然后根据任务需求再确定如何处理这些数据。

内容

数据清洗就是要去掉噪声数据,修正错误,具体包括如下几个方面:

  • 重复数据:在数据集种具有相同信息的数据。
  • 错误数据:主要是指数据集种格式错误、范围错误、包含特殊字符、包含ASCII码的数据,以及二进制、表情符号、全角、半角或其他不可识别的数据。
  • 矛盾数据:是指在数据集种对客观事实的不同维度的描述存在差异,导致数据相互矛盾,eg:物品的销量大于产量等。
  • 缺失数据:主要是指数据集中有一部分信息缺失。

步骤

  1. 找出噪声数据
  2. 清洗数据:根据具体任务指定不同的清洗方法。
  3. 保存数据,可以根据需要将清洗好的数据存储为excel、csv、json、xml等数据格式。这里主要记录下XML数据。

XML的全称是eXtensible Markup Language,是对HTML语言的扩展。XML是完全面向数据本身的,可以表述树结构、图结构等,由于其高度的通用性,因此广泛应用于不同系统间的信息传输。在存储方面,XML使用的是纯文本文档形式。
如下所示:
在这里插入图片描述
读取上述XML文件的代码为:

# coding=utf-8

import xml.etree.ElementTree as Et

def get_nodes(element):
    if len(element) > 0:
        for child in element:
            print(child.tag, ":", child.text)
            get_nodes(child)


if __name__ == "__main__":
    tree = Et.parse("商品销量.xml")
    root = tree.getroot()
    get_nodes(root)

实例

平时,处理数据时,数据量比较大,手动处理比较耗时耗力且容易出错,可以使用python编写自动化数据清洗脚本,以尽快的找到错误的数据行并进错误类别统计。如下所示,时部分歌单信息,包括了歌曲ID、歌曲名称、歌手、发行日期、发行公司,

在这里插入图片描述

但有的数据信息是缺失的,我们分别统计,代码如下:

path = r"music_list.txt"
file = open(file=path)
miss_id_list = []
miss_name_list = []
miss_artist_list = []
miss_publish_date_list = []
miss_company_list = []

# 处理发行公司,若是没有分割后没有长度不为2则是数据缺失
def hadndle_split(tmp_data):
    tmp_list = tmp_data.strip().split(":")
    if len([i for i in tmp_list if len(i.strip()) > 0]) == 2:
        return False
    else:
        return True


for line in file:
    datas = line.split(",")
    if len(datas[0].strip()) == 0:  # 将缺失id的数据存入列表
        miss_id_list.append(line)

    if len(datas[1].strip()) == 0:  # 将缺失名称的数据存入列表
        miss_name_list.append(line)

    if len(datas[2].strip()) == 0:  # 将缺失歌手的数据存入列表
        miss_artist_list.append(line)

    # 将缺失发行时间的数据存入列表
    if len(datas[3].strip()) == 0 or hadndle_split(datas[3].strip()):
        miss_publish_date_list.append(line)

    # 将缺失发行公司的数据存入列表
    if len(datas[4].strip()) == 0 or hadndle_split(datas[4].strip()):
        miss_company_list.append(line)

print("缺失歌曲ID的数据有 {0} 行,分别是:{1}".format(len(miss_id_list), miss_id_list))
print("缺失歌曲名称的数据有 {0} 行,分别是:{1}".format(len(miss_name_list), miss_name_list))
print("缺失歌手姓名的数据有 {0} 行,分别是:{1}".format(len(miss_artist_list), miss_artist_list))
print("缺失发行时间的数据有 {0} 行,分别是:{1}".format(len(miss_publish_date_list), miss_publish_date_list))
print("缺失发行公司名称的数据有 {0} 行,分别是:{1}".format(len(miss_company_list), miss_company_list))
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值