pandas每天一題-題目17:缺失值處理的多種方式

這是一個關於 pandas 從基礎到進階的練習題系列,來源於 github 上的 guipsamora/pandas_exercises 。這個專案從基礎到進階,可以檢驗你有多麼瞭解 pandas。

我會挑選一些題目,並且

提供比原題庫更多的解決方法以及更詳盡的解析

計劃每天更新一期,希望各位小夥伴先自行思考,再檢視答案。如果對你有幫助,記得轉發推薦給你的好友!

上期文章:

pandas每天一題-題目16:條件賦值的多種方式

更多 pandas 高階應用教程,請訂閱我的 pandas 專欄:

後臺回覆"資料",可以下載本題資料集

如下資料:

import pandas as pdimport numpy as npdf = pd。read_csv(‘chipotle。tsv’, sep=‘\t’, converters={‘item_price’: lambda x: float(x[1:-1])})

pandas每天一題-題目17:缺失值處理的多種方式

資料描述:

此資料是訂單明細表。一個訂單會包含很多明細項,表中每個樣本(每一行)表示一個明細項

order_id 列存在重複

item_name 是明細項物品名稱

quantity 是明細項數量

item_price 是該明細項的總價錢

choice_description 是每一項更詳盡的描述

例如: 某個單子中,客人要 1瓶可樂 和 1瓶雪碧 ,那麼這個訂單的 order_id 為:'xx',有2個行記錄(樣本),2行的item_name 都是 "Canned Soda"(蘇打水,視為罐裝飲料) ,quantity 都是1。

第一行的 choice_description 是 "Diet Coke"(可樂) ,第二行是 "Sprite"(雪碧)

前面章節講解過的知識點,本文不再講解!

需求:對資料中的缺失值做合適處理

下面是答案了

哪些列有缺失?

之前的文章已經有講解過:

df。apply( lambda col: col。isna()。sum(), axis=0)

pandas每天一題-題目17:缺失值處理的多種方式

只有 choice_description 列有缺失

不同的填充方式

最簡單的方式,把 nan 都填充一個固定的值:

df[‘choice_description’]。fillna(‘無’)

pandas每天一題-題目17:缺失值處理的多種方式

顯然,這只是返回填充後的列,因此我們把新值賦值回去:

df[‘choice_description’] = df[‘choice_description’]。fillna(‘無’)df

pandas每天一題-題目17:缺失值處理的多種方式

除此之外,還可以使用空值上一行或下一行的值來填充:

df = pd。read_csv(‘chipotle。tsv’, sep=‘\t’, converters={‘item_price’: lambda x: float(x[1:-1])})df[‘choice_description’]。fillna(method=‘ffill’)

pandas每天一題-題目17:缺失值處理的多種方式

行4:引數 method 可以是 ‘ffill’ 前向參考,‘bfill’ 後向參考。

這裡使用前向參考,因此第一行記錄前面沒有記錄可參考,無法填充。第4行記錄使用第3行的值填充

顯然,直接前向或後向填充,通常沒有意義。

篇幅關係,我把分組填充缺失值放到下一節

推薦閱讀:

懂Excel就能輕鬆入門Python資料分析包pandas(五):重複值處理

20行程式碼教會Python分析商品評價

Python動態互動系列(01),不用改程式碼,點點按鈕就可以完成

Python玩資料入門必備系列(7):最會匹配的集合,字典