資料清理的步驟
# 一、讀取資料
匯入NumPy和Pandas資料庫,用Pandas的read_csv函式讀取原始資料集’e_commerce.csv’,使其轉換成DataFrame格式,並賦值給變數df。
展示資料集的前5行和後5行。
# 二、評估資料(整潔度、乾淨度)
建立一個新的變數cleaned_data = df(相當於複製一個,對備份進行操作)
評估主要從兩個方面進行:結構和內容,即整齊度和乾淨度。'''df.info/df.describe 看整體'''
1. 資料的結構性問題:
* 每列是一個變數,
* 每行是一個觀察值,
* 每個單元格是一個值
2. 資料的內容性問題包括存在丟失資料、重複資料、無效資料等:
* 缺失,df.isnull.sum
* 重複,df.duplicated
* 評估填寫不一致的資料,df[].value_counts
* 資料型別 df.info
* 評估無效/錯誤資料 df.describe()
# 三、清理資料
根據前面評估時候的記錄來進行清理
1. 處理結構問題:
* 每列是一個變數:df.melt()
* 每行是一個觀察值:df.melt()
* 每個單元格是一個值:df.explode()
2. 處理內容問題:
* 缺失:df.fillna填充 ,或者直接刪除 df.dropna
* 重複:df.drop_duplicates() 刪除重複值
* 評估填寫不一致的資料:df.replace([舊1,舊2],新,inplace = True) 用替代來統一
* 資料型別 df.astype() 修改資料型別
* 評估無效/錯誤資料:df.drop() 直接刪了
# 四、儲存資料
cleaned_df.to_csv('e_commerce_cleaned.csv', index=False)
方法詳解
df.melt
# 適用場景:主要用於將寬資料轉換成長資料
df.explode()
# 適用場景:主要用於將一個包含列表或陣列等可迭代物件的列展開。
如果一列中有很多內容(比如一列中包含一個列表),想讓內容分開單獨成行,則可使用explode。
——————如果非列表或陣列,則不行
df.fillna(直接寫值)/df[某行列].fillna({列名:替換值,列名:替換值})
# 適用場景:主要用於 自動找到缺失值進行填充
df.dropna()/
df.dropna(subset = [關注的列名])/
df.dropna(axis = 1)
# 適用場景:主要用於 直接刪除存在缺失值的行
如果傳入了subset,那麼只要關注列沒有缺失,其他列有缺失也不會刪除;
如果axis = 1,就變成了關注列,只要某列有空缺,直接刪除整列
df.drop_duplicates()
# 適用場景:刪除重複資料
如果希望是兩列同時重複,才刪除,就df.drop_duplicates(subset = [關注的列名1,關注的列名2])
一般遇到重複值,會刪除後面出現的值,如果想刪除前面的重複值,則drop_duplicates(keep = 'last')
df.replace(原值,替換值)/dr.replace(字典)
# 適用場景:將值進行統一的時候
如果有很多個值都想替換成同一個值,直接在原值處放列表即可
如果放字典,鍵為原值,值為替換值
df.astype(型別)
# 適用場景:需要轉換值的型別的時候,比如str轉int
有一個特殊的型別是“category”,意思是一些有限的分類的值,比如顏色【藍,紅,黃】;部門【人事部,財務部,銷售部】