從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)

總結

在這裏插入圖片描述

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