爲什麼要學習數據清洗
在數據挖掘中,數據清洗是前期準備工作,對於數據科學家來說,我們會遇到各種各樣的數據,在分析前,要投入大量的時間和精力把數據“整理裁剪”成自己想要或需要的樣子。使得數據標準、乾淨、連續,爲後續數據統計、數據挖掘做好準備。
數據質量的準則
1.完整性:單條數據是否存在空值,統計的字段是否完善。
2.全面性:觀察某一列的全部數值,比如在Excel表中,我們選中一列,可以看到該列的平均值、最大值、最小值。我們可以通過常識來判斷該列是否有問題,比如:數據定義、單位標識、數值本身。
3.合法性:數據的類型、內容、大小的合法性。比如數據中存在非ASCII字符,性別存在了未知,年齡超過了150歲等。
4.唯一性:數據是否存在重複記錄,因爲數據通常來自不同渠道的彙總,重複的情況是常見的。行數據、列數據都需要是唯一的,比如一個人不能重複記錄多次,且一個人的體重也不能在列指標中重複記錄多次。
數據清洗實戰
使用 Pandas 庫對數據清洗
原始數據如圖:
這些數據缺少標註,有些出現空值,food列中有重複數據,ounces 列有空值和負數,animal 有大小寫不一致,這些都要處理掉,最後獲得一份純淨的有用的數據
下面,我們就依照“完全合一”的準則,使用Pandas來進行清洗。
-
完整性
問題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) -
全面性
問題:列數據的單位不統一
字符全部轉化成小寫,保持字符一致
df[‘Animal’]= df[‘Animal’].str.lower()
df[‘food’]= df[‘food’].str.lower() -
合法性
Ounces列出現負數,取絕對值
df[‘Ounces’]= df[‘Ounces’].apply(lambda x: abs(x)) -
唯一性
我們校驗一下數據中是否存在重複記錄。如果存在重複記錄,就使用 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)