在數據分析過程中,數據清洗在時間上佔到了80%。
數據質量的準則(「完全合一」)
(1)完整性:單條數據是否存在空值,統計的字段是否完善。
(2)全面性:觀察某一列的全部數值,通過常識來判斷該列是否有問題。
(3)合法性:數據的類型、內容、大小的合法性。
(4)唯一性:數據是否存在重複記錄
數據清理要使數據標準、趕緊、連續,爲後續數據統計、數據挖掘做好準備。
1、完整性
問題1:缺失值
解決辦法:①刪除 ②均值 ③高頻
df['Age'].fillna(df['Age'].mean(), inplace=True) #均值 age_maxf = train_features['Age'].value_counts().index[0] train_features['Age'].fillna(age_maxf, inplace=True) #高頻值
問題2:刪除空行
# 刪除全空的行(除了index外,其他都是空值) df.dropna(how='all',inplace=True)
2.全面性
問題:列數據的單位不統一
# 獲取 weight 數據列中單位爲 lbs 的數據 rows_with_lbs = df['weight'].str.contains('lbs').fillna(False) print df[rows_with_lbs] # 將 lbs 轉換爲 kgs, 2.2lbs=1kgs for i,lbs_row in df[rows_with_lbs].iterrows(): # 截取從頭開始到倒數第三個字符之前,即去掉 lbs。 weight = int(float(lbs_row['weight'][:-3])/2.2) df.at[i,'weight'] = '{}kgs'.format(weight)
3.合理性
問題:非ASCII字符
# 刪除非 ASCII 字符 df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True) df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
4.唯一性
問題1:一列有多個參數
# 切分名字,刪除源數據列 df[['first_name','last_name']] = df['name'].str.split(expand=True) df.drop('name', axis=1, inplace=True)
問題2:重複數據
# 刪除重複數據行 df.drop_duplicates(['first_name','last_name'],inplace=True)