官术网_书友最值得收藏!

6.1 缺失值處理

我們在數據庫中存儲的數據一般都會由于各種原因存在缺失值,我們需要對這部分數據進行處理。一般的處理方式有兩種:第一種是直接把缺失值過濾掉,第二種是對缺失值進行填充。

1. Excel實現

對第一種處理方式,在Excel中,我們可以通過篩選的方式將非缺失值部分篩選出來,從而就可以得到過濾掉缺失值以后的數據了。

對第二種處理方式,我們可以通過篩選的方式將缺失值部分篩選出來,然后手動填充上我們想要的值。我們也可以通過空值定位條件來對全表中的缺失值進行統一填充。先按Ctrl+G快捷鍵調出“定位”對話框,然后單擊“定位條件”按鈕,在彈出的“定位條件”對話框中選擇“空值”選項,最后單擊“確定”按鈕。這樣就會把所有的缺失值單元格選中,在第一個缺失值單元格內輸入想要填充的值,輸入以后按Ctrl+ Enter快捷鍵就可以對所有缺失值進行填充。

2. SQL實現

對第一種處理方式,在SQL中,我們可以通過where進行過濾,具體實現代碼如下:

select
   *
from
   demo.chapter6
where profession != ""

運行上面的代碼,我們就可以得到過濾掉缺失值以后的數據,具體運行結果如下表所示。

!=表示不等于,""表示空值,缺失值有空格、null和空值三種表現形式,前兩種形式雖然也表示缺失值,但是在對應的單元格內是有值的,而后一種空值是沒有值的,表示這個單元格什么都沒有。

如果缺失值是用空格表示的,要過濾掉缺失值,where后面就需要改成profession != " ";如果缺失值是用null表示的,要過濾掉缺失值,where后面就需要改成profession is not null。

上面的處理方式把profession列是缺失值的行都過濾掉了,所以這種處理方式會把其他非缺失值的字段過濾掉,而造成數據的浪費。我們可以將profession列中的缺失值填充為其他,而不是直接過濾掉,這就是針對缺失值的第二種處理方式,使用的是coalesce()函數,具體實現代碼如下:

select
   order_id
   ,memberid
   ,coalesce(profession,"其他")
from
   demo.chapter6

運行上面的代碼,具體運行結果如下表所示。

上面的結果并不是我們想要的,profession列的缺失值并沒有填充成其他。

這是因為coalesce()函數的形式為(null,null,...,null,value)。

如果value前面的值均為null,則缺失值被填充為value。我們在前面講過,用來表示缺失值的空值和null是有區別的,這里面的缺失值是空值而非null,所以coalesce()函數沒有生效。

運行下面的代碼,就可以得到我們想要的結果:

select coalesce(null,"我是填充值")

運行上面的代碼,得到的結果為我是填充值。

對于這種缺失值是空值的情況,我們可以用if條件語句來進行處理,關于if條件語句,后續章節會詳細講述。

讀者有沒有注意到,上面的代碼中只有select,而沒有from,按照我們之前的理解,要想select必須先指明從哪里select,也就是應該要有from。可是為什么上面的代碼中雖然沒有寫from,但依然可以得出結果呢?這是因為select部分不需要依賴于任何表的數據,全部是由我們手動填充的,我們只是利用了SQL中提供的功能對我們手動填充的數據進行運算。比如,我們還可以進行如下運算:

select 1 + 1

運行上面的代碼,最后得到的結果為2。

主站蜘蛛池模板: 灵山县| 四川省| 昌乐县| 额敏县| 景谷| 长兴县| 大竹县| 佛教| 元氏县| 合川市| 鹤岗市| 鄂托克旗| 阳西县| 于田县| 安达市| 上饶市| 怀远县| 梨树县| 尚志市| 革吉县| 诸城市| 夹江县| 桦川县| 大邑县| 柘荣县| 滦平县| 康保县| 如东县| 清远市| 抚松县| 翁源县| 武川县| 京山县| 华蓥市| 皮山县| 临猗县| 海南省| 泸西县| 北川| 招远市| 新营市|