寫在前面
上週我們讀取完了數據(Python數據分析實戰:獲取數據),下面就要對數據進行清洗了,首先是對缺失值的處理。缺失值也就是空值,先找出來再處理。
查看缺失值
可以使用isnull方法來查看空值,得到的結果是布爾值。
# 查看缺失值
df_list.isnull()
結果:
對於小的數據集來說,可以這樣看,但對於大的數據集這樣查看空值貌似沒什麼意義,沒關係,還有其他方法,可以使用info方法
# 查看空值
df_list.info()
結果:
info方法可以看到字段的數據類型以及每個字段下有多少個非空值,可以看到neighbourhood_group 字段全爲空,這和布爾值顯示的結果一致。
其實還有一個方法,更簡單了:
# 查看空值
df_list.isnull().sum()
對取出來的isnull的布爾值求和,就很明顯地看到,id列是沒有空值的,name列有一個空值,結果:
也可以對單獨的某一列這樣查看空值,對name列查看空值
# 對單獨一列查看空值
df_list["name"].isnull().sum()
結果爲1,說明name列有1個空值:
缺失值的處理
找到缺失值以後如何處理呢?刪除或填充。
刪除缺失值
用dropna方法,默認是隻要一行中有一個缺失值這一行就全都刪除
# 刪除缺失值
df_list.dropna()
結果就是這個數據集裏的數據全被刪掉了,因爲其中的neighbourhood_group這個字段全爲空,按照dropna的尿性,有一個爲空就整行刪除,就得到了如下結果:
當然也可以給這個方法傳入how="all"參數,只有在整行爲空的前提下才刪除。
# 整行都爲空才刪除
df_list.dropna(how = "all")
結果是一條都沒有刪除,因爲這個數據集裏沒有所有字段都爲空的記錄:
但是有一列數據都爲空的字段,把neighbourhood_group這一列刪掉,還記得刪除列的方法嗎
# 刪除列
df_list = df_list.drop(columns = "neighbourhood_group")
df_list
結果:
name列也是有一個空值的,找出來看一下
# 定位到name列的空值
df_list[df_list["name"].isnull()]
結果如下,這一行還是刪了吧。
刪除行用drop方法,剛剛定位出了要刪除的那一行,行索引是456
# 刪除name列的空值的行
df_list = df_list.drop(index = 456)
df_list
結果可以看到變成了28451行,之前一直都是28452行。
缺失值填充
當然缺失值除了刪除外,還可以進行填充,可以用0填充,也可以用均值、衆數填充。用fillna方法進行缺失值的填充。
last_review和reviews_per_month這兩列也有缺失值,我們用衆數填充(mode)last_review列的缺失值,用均值(mean)填充reviews_per_month列的缺失值。
# 缺失值填充
df_list.fillna({"last_review":df_list.last_review.mode(),
"reviews_per_month":df_list.reviews_per_month.mean()})
結果
這裏只是舉例缺失值也可以被填充這樣處理,在這個案例裏,不建議這兩列填充,空着就空着吧。下節內容來處理重複值和異常值。
猜你喜歡:
Python數據分析實戰:獲取數據
@ 作者:可樂
@ 公衆號/知乎專欄/頭條/簡書:可樂的數據分析之路
@ 加微信(data_cola)備註:進羣,拉你進可樂的數據分析交流羣,數據分析知識總結,不定期行業經驗分享