从0到1数据分析实战学习笔记(二)数据清洗

为什么要学习数据清洗

在数据挖掘中,数据清洗是前期准备工作,对于数据科学家来说,我们会遇到各种各样的数据,在分析前,要投入大量的时间和精力把数据“整理裁剪”成自己想要或需要的样子。使得数据标准、干净、连续,为后续数据统计、数据挖掘做好准备。

数据质量的准则

1.完整性:单条数据是否存在空值,统计的字段是否完善。
2.全面性:观察某一列的全部数值,比如在Excel表中,我们选中一列,可以看到该列的平均值、最大值、最小值。我们可以通过常识来判断该列是否有问题,比如:数据定义、单位标识、数值本身。
3.合法性:数据的类型、内容、大小的合法性。比如数据中存在非ASCII字符,性别存在了未知,年龄超过了150岁等。
4.唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复的情况是常见的。行数据、列数据都需要是唯一的,比如一个人不能重复记录多次,且一个人的体重也不能在列指标中重复记录多次。

数据清洗实战

使用 Pandas 库对数据清洗

原始数据如图:
在这里插入图片描述
这些数据缺少标注,有些出现空值,food列中有重复数据,ounces 列有空值和负数,animal 有大小写不一致,这些都要处理掉,最后获得一份纯净的有用的数据

下面,我们就依照“完全合一”的准则,使用Pandas来进行清洗。

  1. 完整性
    问题1:缺失值
    删除 空列
    df.drop(‘Unnamed: 3’, axis=1, inplace=True)
    df.drop(‘Unnamed: 4’, axis=1, inplace=True)
    df.drop(‘Unnamed: 5’, axis=1, inplace=True)
    df.drop(‘Unnamed: 6’, axis=1, inplace=True)
    使用当前列的均值填补空值
    df[‘Ounces’].fillna(df[‘Ounces’].mean(), inplace=True)

  2. 全面性
    问题:列数据的单位不统一
    字符全部转化成小写,保持字符一致
    df[‘Animal’]= df[‘Animal’].str.lower()
    df[‘food’]= df[‘food’].str.lower()

  3. 合法性
    Ounces列出现负数,取绝对值
    df[‘Ounces’]= df[‘Ounces’].apply(lambda x: abs(x))

  4. 唯一性
    我们校验一下数据中是否存在重复记录。如果存在重复记录,就使用 Pandas 提供的 drop_duplicates() 来删除重复数据。
    df.drop_duplicates([‘food’],inplace=True)

实战代码如下

import pandas as pd
import numpy as np
from pandas import Series, DataFrame

//读取文件
df = pd.read_csv('./test.csv')
print(df)
df.drop('Unnamed: 3', axis=1, inplace=True)
df.drop('Unnamed: 4', axis=1, inplace=True)
df.drop('Unnamed: 5', axis=1, inplace=True)
df.drop('Unnamed: 6', axis=1, inplace=True)

df['Ounces'].fillna(df['Ounces'].mean(), inplace=True)
df['Ounces']= df['Ounces'].apply(lambda x: abs(x))
df['Animal']= df['Animal'].str.lower()
df['food']= df['food'].str.lower()
df.drop_duplicates(['food'],inplace=True)

print(df)

总结

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章